;--------------------------------------- ; Datum : 28.09.89 ; Prog.Name : MTB18/D2 ; ; Pr}fprogr. : P 064 ; ; Steuerprogramm f}r Modultestblock + ; Testprogramme f}r nachfolgend aufge- ; f}hrte Modultypen: ; ; - M 001 DIO : 0EFH ; - M 003 V24 : 0EEH ; - M 006 BASIC : 0FCH ; - M 010 ADU : 0E7H ; - M 011 64K-RAM : 0F6H ; - M 012 TEXOR : 0FBH ; - M 022 16K-RAM : 0F4H ; - M 025 USER : 0F7H ; - M 026 FORTH : 0FBH ; - M 027 DEVELOPMENT : 0FBH ; - M 029 DAU : 0E6H ; ; Testkonf.: Steuerger{t (KC/) ; Prog. auf modif. M 025 ; (Str.-Byte 01H =>Autostart) ; wahlweise -> Modultestblock ; oder => 2 x D 002 ; ; Pr}fmodul wird nach Autostart auf die ; Basisadresse 0C000H geschaltet ; es erfolgt ein R}cksetzen aller im ; MTB steckenden Module sowie eine ; Ueberpr}fung auf "zugelassene" Struk.- ; Bytes ; nach Anzeige der Anzahl zu bearbei- ; tender Module wird das Grundmenu ; aufgebaut (Schachtnr./St.-Byte/Fehler) ; Zyklusz{hler l{uft unten rechts ; ; Programmabruch => ; Fehleranzeigemodus => ; ; Programm }ber Tabellen modifizierbar ;[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ ; Schachtadressen : SCTAB EQU ; Programmtabellen: BLOTAB EQU 0C900H ; Fehlermatrix : MATRIX EQU 01000H ; zugel.Str.Bytes : STRROM EQU ; ; ; ;--------------------------------------- ;*****VEREINBARUNGEN***** .z80 .phase 0c000h ; UP EQU 0F00CH SYS EQU 0F003H COLOR EQU 0B7A3H ; POS1 EQU 00A0AH ;Modul(e) POS2 EQU 0 ;Pos."*"bei INT. POS3 EQU 0204H POS4 EQU 1E04H POS5 EQU 1C03H POS6 EQU 5 POS11 EQU 80CH ;Strukturbyteanzeige POS13 EQU 050CH ;Fehlerausgabe POS15 EQU 1B1FH ;Zyklusanzeige POS16 EQU 050CH ;Blinkposition POS18 EQU 060CH ;Schachtanzeige WON1 EQU 1A00H WLEN1 EQU 527H WON2 EQU 0 WLEN2 EQU 1F27H WON3 EQU 0 WLEN3 EQU 1F28H Z1 EQU 200H ;Mod.Z{hler Z2 EQU 202H ;Tastenmerker Z3 EQU 204H ;Mod.Zahl im MTB Z4 EQU 206H ;IRM on/off? Z5 EQU 208H ;Welche Taste? Z7 EQU 20CH ;akt.Schacht Z8 EQU 20EH ; Z9 EQU 0E2H ;Blinkfarbe Z10 EQU 038H ;Grundfarbe Z11 EQU 210H Z13 EQU 214H ZZ1 EQU 220H ;Merke BLTAB STRTYP EQU 254H ;Strukturtyp ERR EQU 256H ;Gesamtfehler CYCL EQU 258H ;Zyklusz{hler LANG EQU 2FFH ;L{nge Matrix CUMERK EQU 25AH ;CUPOS.vor INT. IMERK EQU 25CH ;INT-Vektor MATRIX EQU 1000H ;Fehlermatrix FETAB EQU 1100H ;Zahl Fehler STRTAB EQU 300H ;Tab.Strbytes IDENT EQU 330H BLOTAB EQU 0C900H ;Zeigertab.Prut. ;FUER TESTROUTINEN FREIE BEREICHE: ; -AB CA00H-DEFFH ;********GRUNDPROGRAMM MTB************** ;Umkopieren der Startroutine in RAM LD HL,400EH LD DE,0 LD BC,30H LDIR ; JP 0 IN A,(88H) RES 7,A OUT (88H),A LD A,2 LD L,3 LD D,0 CALL SYS DEFB 26H LD A,2 LD L,4 LD D,0 CALL SYS DEFB 26H LD BC,880H LD A,0C1H OUT (C),A JP PROG ; ;....................................... STRROM: DEFW 07978H DEFW 07B7AH DEFW 0FFFFH DEFW 0FFFFH SCTAB: DEFW 100CH DEFW 1814H DEFB 1CH DEFW 2420H DEFW 2C28H DEFW 0FFFFH ;....................................... DEFW 7F7FH DEFM 'AS' DEFB 1 PROG: LD A,7 ;s/w LD (COLOR),A CALL IRMOFF CALL FCAOS ;volles Fenster CALL CLS CALL NULL ;Matrix=!0 CALL INIT ;Module off! CALL ZAHL ;Modulzahl CALL CLS CALL MZOUT ;Ausgabe MZAHL CALL CLS CALL FHELP ;Hilfsmenu CALL FPROG JR START ;ENDE INITIALISIERUNG STA0: PUSH HL CALL IRUPT POP HL JR STA1 START: NOP LD HL,(CYCL) PUSH HL LD A,L CP 1 POP HL JR Z,STA0 STA1: INC HL LD (CYCL),HL XOR A LD (Z1),A LD (Z2),A ;Merke Tast-Code LD HL,SCTAB START0: PUSH HL CALL FCAOS CALL IRMON LD HL,POS15 LD (0B7A0H),HL CALL IRMOFF LD HL,(CYCL) CALL HEXDEZ POP HL CALL IRMON LD A,0B8H LD (COLOR),A CALL BLINK CALL IRMOFF LD A,(HL) ;akt.Schacht PUSH HL LD (Z7),A CALL MOON ;akt.Mod on! LD A,(STRTYP) ;Str.Byte CALL STRU ;Verteiler POP HL PUSH HL LD A,(HL) CALL MOOUT ;akt.Mod.off! CALL IRMON LD A,7 LD (COLOR),A CALL BLINK CALL IRMOFF LD A,(Z2) ;ASCII v.Taste CP 3 ;BREAK JP Z,CAOS POP HL ;akt.Schacht INC HL XOR A LD (Z2),A ;Keine Taste LD A,(Z1) ;akt. Zahl Mod. CP 9 JP Z,START ;n{chster Zykl. INC A LD (Z1),A JR START0 ;======================================= ;>>>>>>>>>>>ENDE HAUPTPROGRAMM<<<<<<<<< ;======================================= MOON: PUSH BC LD B,A LD C,80H LD A,43H OUT (C),A IN A,(C) LD (STRTYP),A POP BC RET ; MOOUT: PUSH BC LD B,A LD C,80H XOR A OUT (C),A POP BC RET ;*************************************** IRMON: PUSH AF IN A,(88H) SET 2,A OUT (88H),a POP AF RET IRMOFF: PUSH AF IN A,(88H) RES 2,A OUT (88H),a POP AF RET ;*************************************** TARUPT: DI LD HL,(IMERK) LD (01E6H),HL EI RET IRUPT: DI LD HL,(1E6H) LD (IMERK),HL LD HL,RUPT LD (01E6H),HL EI RET ;*************************************** BLINK: PUSH AF PUSH BC PUSH DE PUSH HL LD HL,POS16 LD A,(Z1) BLI4: PUSH HL LD L,A ADD A,a ADD a,L POP HL ADD a,L LD L,A LD (0B79CH),HL LD HL,102H LD (0B79EH),HL CALL SYS DEFB 23H DEFW 0CH POP HL POP DE POP BC POP AF RET ;*************************************** CLS: LD HL,TCLS LD E,45H CALL UP RET TCLS: DEFB 0CH DEFB 0 ;*************************************** NULL: XOR A LD HL,MATRIX LD DE,MATRIX+1 LD (HL),A LD BC,LANG LDIR LD (Z3),A ;Mod.Zahl im MTB LD HL,0 LD (ERR),HL ;Gesamtfehler LD (CYCL),HL ;Zyklusz{hler RET ;*************************************** INIT: LD HL,SCTAB LD B,9 ;Schachtzahl INI1: LD A,(HL) CALL MOOUT INC HL DJNZ INI1 RET ;*************************************** ; Berechnen der Modulzahl ZAHL: LD HL,SCTAB ;Schachttabelle LD BC,IDENT ;Vergl.tabelle LD DE,STRTAB ;zug.Str.Bytes LD A,9 ;max. Modulzahl LD (Z1),A ;merken! ZA1: PUSH HL PUSH DE PUSH BC LD A,M CALL MOON LD A,(STRTYP) CALL STCOMP JR C,ZA3 POP BC POP DE POP HL ZA2: LD A,(Z8) LD (BC),A INC BC LD A,(STRTYP) LD (DE),A INC DE LD A,M INC HL CALL MOOUT LD A,(Z1) DEC A LD (Z1),A CP 0 JR NZ,ZA1 RET ZA3: POP BC POP DE POP HL JR ZA2 ; STCOMP: LD HL,STRROM ;exist.Str.Bytes STCO1: PUSH AF LD A,M CP 0FFH ;Ende Str.Tabel. JR Z,STCO2 POP AF CP (HL) JR Z,STCO3 INC HL JR STCO1 STCO2: POP AF PUSH AF CP 0FFH JR Z,STCO20 LD A,2 LD (Z8),A STEND: POP AF SCF RET STCO20: LD A,0 LD (Z8),A JR STEND STCO3: PUSH AF LD A,(Z3) ;Mod.Z{hler INC A LD (Z3),A LD A,1 LD (Z8),A XOR A POP AF RET ;*************************************** MZOUT: CALL IRMON LD HL,POS1 LD (0B7A0H),HL CALL IRMOFF LD HL,(Z3) ;MODULZAHL CALL KONV LD HL,TMZ LD E,45H CALL UP XOR A LD E,14H CALL UP RET TMZ: DEFM ' MODUL(E) !' DEFB 0 ;*************************************** KONV: PUSH AF PUSH BC PUSH DE PUSH HL JR HEDEZ1 HEXDEZ: PUSH AF PUSH BC PUSH DE PUSH HL LD BC,2719H ;10000 CALL HL20 LD BC,3E8H ;1000 CALL HL20 LD BC,64H ;100 CALL HL20 HEDEZ1: LD BC,0AH ;10 CALL HL20 LD A,30H ADD a,L CALL ZOUT POP HL POP DE POP BC POP AF RET HL20: LD A,30H OR A HL30: SBC HL,BC INC A JR NC,HL30 ADD HL,BC DEC A CALL ZOUT RET ZOUT: LD E,0 CALL UP RET ;*************************************** FHELP: CALL IRMON LD HL,WON1 LD (0B79CH),HL LD HL,WLEN1 LD (0B79EH),HL CALL IRMOFF LD HL,THELP LD E,45H CALL UP RET THELP: DEFM 'CAOS BREAK' DEFM ' ZYKLUS :' DEFB 0 ;************************************** FPROG: CALL IRMON LD HL,WON2 LD (0B79CH),HL LD HL,WLEN2 LD (0B79EH),HL CALL IRMOFF CALL MATME CALL STROUT ;STRBYTES RAUS CALL FELOUT ;FEHLER RAUS RET ;*************************************** FCAOS: CALL IRMON LD HL,WON3 LD (0B79CH),HL LD HL,WLEN3 LD (0B79EH),HL CALL IRMOFF RET ;*************************************** CAOS: CALL FCAOS CALL TARUPT CALL CLS CALL IRMON POP AF CALL 0F003H DEFB 12H ;*************************************** ;**************************************: STRU: LD HL,STRROM LD C,0 STRU1: PUSH AF LD A,(HL) CP 0FFH JR Z,STRU3 ;EXISTIERT NICHT POP AF CP (HL) JR Z,STRU2 INC HL PUSH AF LD A,C ADD a,20H LD C,A POP AF JR STRU1 STRU3: POP AF RET ;Berechnen Adresse f.Tab.Pr}fprogramme STRU2: LD DE,BLOTAB LD A,C ADD a,E LD E,A VERT: LD A,(DE) INC DE LD L,A LD A,(DE) LD H,A CP 0FFH RET Z ;Ende Pr}fprog. ;in HL steht Zeiger auf UP-Tab/MTYP INC DE PUSH DE PUSH HL POP DE LD HL,VERTR PUSH HL PUSH DE POP HL JP (HL) VERTR: CALL C,FEHLER POP DE JR VERT ;*************************************** COMP: PUSH AF CP 0 JR Z,COM1 CP 16 CALL C,UPFEAN CALL NC,UPDEF POP AF RET COM1: PUSH DE LD DE,IDENT LD A,(Z13) ADD a,E LD E,A LD A,(DE) CP 1 CALL Z,UPOK LD A,(DE) CP 0 CALL Z,UPOK1 LD A,(DE) CP 2 CALL Z,NOEX POP DE POP AF RET ;*************************************** FERES: PUSH AF PUSH DE PUSH HL LD B,8 LD HL,CUTAB LD DE,FETAB FERES1: PUSH BC PUSH HL PUSH DE LD A,(HL) LD H,A LD L,POS6+3 CALL IRMON LD (0B7A0H),HL CALL IRMOFF LD A,(DE) CP 16 CALL NC,FERES3 POP DE POP HL POP BC INC HL INC DE DJNZ FERES1 LD HL,CUTAB LD B,8 FERES2: PUSH BC PUSH HL PUSH DE LD A,(HL) LD H,A LD L,POS6+31 CALL IRMON LD (0B7A0H),HL CALL IRMOFF LD A,(DE) CP 16 CALL NC,FERES3 POP DE POP HL POP BC INC HL INC DE DJNZ FERES2 POP HL POP DE POP AF RET FERES3: XOR A CALL SYS DEFB 14H CALL SYS DEFB 23H DEFM 'Y/N' DEFB 0 FERES5: LD A,(IX+13) CP 'Y' JR Z,FERES4 RET Z FERES4: CALL SYS DEFB 23H DEFW 7 XOR A LD (DE),A RET ;**************************************: FELOUT: PUSH HL CALL IRMON LD HL,POS13 LD (0B7A0H),HL CALL IRMOFF LD HL,FETAB LD B,9 CALL STR1 POP HL RET ;*************************************** STROUT: PUSH HL CALL IRMON LD HL,POS11 LD (0B7A0H),HL CALL IRMOFF LD HL,STRTAB LD B,9 CALL STR1 POP HL RET STR1: PUSH BC LD A,(HL) LD E,1CH CALL UP INC HL LD E,2BH CALL UP POP BC DJNZ STR1 RET ;*************************************** UPOK: CALL 0F003H DEFB 23H DEFM 'OK' DEFB 0 RET ;*************************************** UPOK1: CALL 0F003H DEFB 23H DEFM 'LEER!' DEFB 0 RET ;*************************************** UPFEAN: LD H,0 LD L,A CALL IRMOFF CALL KONV CALL IRMON CALL 0F003H DEFB 23H DEFM ' FEHLER!' DEFB 0 SCF RET ;*************************************** NOEX: CALL 0F003H DEFB 23H DEFM 'UNBEKANNT' DEFB 0 RET ;*************************************** UPDEF: CALL 0F003H DEFB 23H DEFM 'DEFEKT' DEFB 0 RET ;**************************************: MATME: LD HL,TMAT LD E,45H CALL UP CALL IRMON LD HL,POS18 LD (0B7A0H),HL LD HL,SCTAB CALL SRAUS CALL IRMOFF RET ;***************************************************** ;AUSGABE STRUKTURBYTES SRAUS: LD B,9 SRAUS0: PUSH BC LD A,M CP 0FFH JR Z,SRAUSE CALL SYS DEFB 1CH SRAUS1: CALL SYS DEFB 2BH INC HL POP BC DJNZ SRAUS0 RET SRAUSE: LD A,20H CALL SYS NOP LD A,20H CALL SYS NOP JR SRAUS1 ;*************************************************************** ;BILDSCHIRMMASKE ; TMAT: DEFW 100DH DEFB 0AH DEFM ' *** PRUEFPROGRAMM P 064 ***' DEFW 0A0DH DEFW 0A0AH DEFW 0A0AH DEFM 'SCHACHT ' DEFM ' ' DEFW 0A0AH DEFB 0DH DEFM 'STRBYTE' DEFW 0A0AH DEFB 0DH DEFM 'FEHLER' DEFB 0 ;*************************************** FEHLER: PUSH AF PUSH BC PUSH DE PUSH HL CALL IRMON LD A,7 LD (COLOR),A CALL IRMOFF CALL FCAOS LD D,0 LD HL,FETAB LD A,(Z1) LD E,A ADD HL,DE LD A,M INC A LD M,A LD (ERR),A BIT 7,A JR NZ,FEHEND JR FEHRET FEHEND: LD A,0FFH LD M,A FEHRET: CALL FELOUT LD HL,TUT LD E,45H CALL UP POP HL POP DE POP BC POP AF RET TUT: DEFW 7 ;*************************************** ;CU-Position + Farbe einstellen FEOUT: PUSH HL LD HL,CUTAB ADD HL,DE CALL IRMON LD (0B7A0H),HL CALL IRMOFF POP HL LD A,(ERR) LD E,1CH CALL UP RET ;*************************************** UMMI: LD A,(Z1) SUB 17 CPL RET ;....................................... ;....................................... PTEST: RET ;*************************************** RUPT: EI PUSH AF IN A,(88H) BIT 2,A JR NZ,RUPT3 SET 2,A OUT (88H),A LD A,1 LD (Z4),A JR RUPT1 RUPT3: XOR A LD (Z4),A RUPT1: PUSH AF IN A,(8FH) PUSH AF LD A,0A7H OUT (8FH),A LD A,8FH OUT (8FH),A POP AF BIT 3,(IX+8) RES 3,(IX+8) JR NZ,TEND CP 65H JP NC,TA0 CP 44H JP NC,TA1 PUSH HL PUSH DE SRL (IX+12) LD A,(IX+8) AND 80H RLC A XOR (IX+12) LD H,0 LD E,(IX+14) LD D,(IX+15) LD L,A ADD HL,DE LD A,(HL) POP DE POP HL T2: CP (IX+13) JR Z,T3 LD (IX+13),A RES 4,(IX+8) T5: SET 0,(IX+8) LD (IX+10),0 JR TEND T3: INC (IX+10) BIT 4,(IX+8) JR NZ,T4 BIT 4,(IX+10) JR Z,TEND SET 4,(IX+8) JR T5 T4: BIT 1,(IX+10) JR NZ,T5 TEND: POP AF PUSH AF PUSH BC PUSH DE PUSH HL LD A,(IX+13) LD (Z2),A LD HL,(0B7A0H) LD (CUMERK),HL LD HL,POS2 LD (0B7A0H),HL CALL 0F003H DEFB 23H DEFM '*' DEFB 0 IWEIT: LD HL,(CUMERK) LD (0B7A0H),HL POP HL POP DE POP BC POP AF LD A,(Z4) CP 1 CALL Z,RUPT2 IN A,(89H) OUT (89H),A POP AF RETI RUPT2: IN A,(88H) RES 2,A OUT (88H),A RET TA0: OR A JR TAS2 TA1: SCF TAS2: RR (IX+12) JR TEND ;*****LIEGT DANN IM ROM CUTAB: DEFW 1214H DEFW 0E10H DEFW 0709H DEFW 0305H DEFW 0FFFFH mtbend: ;*********************************************** ; END