MQMASM; ORG 0BA00H ; ORG 07000H ; ;*************************************** ; ; MPM 9.1.89 B. SCHENK ; ; ASSEMBLIERUNG VON MASCHINENPROGRAMMEN ; ------------------------------------- ; ERSTELLUNG EINER QUELLE VON EINEM IM ; SPEICHER BEFINDLICHEN MASCHINENPRO- ; GRAMM MIT MARKENGENERIERUNG UND EDAS- ; FORMATIERUNG ;PROGRAMM DIENT LEDIGLICH ZUR UNTER- ;STUETZUNG BEI DER ERSTELLUNG EINER ;KORREKTEN QUELLE.ES LIEFERT NUR BEI ;EINFACHEN MC-PROGRAMMEN EINE KORREKTE ;QUELLE ;ES MACHT SICH IN DEN MEISTEN FAELLEN ;EINE NACHARBEIT ERFORDERLICH. ;MARKEN AUF BEFEHLSTEILE UND ANDERE ;PROGRAMMIERTRICKS,SOWIE TEXTE IM ;PROGRAMM WERDEN ENTWEDER NICHT ER- ;KANNT ODER ALS MNEMONIK INTERPRETIERT. ;LADEBEFEHLE MIT DIREKTADRESSE WERDEN ;MIT MARKEN VERSEHEN ( LD (UB782),DE ) ;FALLS 0 < PA4 < 100H ;-PROGRAMME: ; MQI (EDAS-INIT) ; MQM (UEBERSETZUNG DES MC IN ASSEMBLER- ; MNEMONIK) ; ;PARAMETERUEBERGABE: ; MQI QUELLTEXTENDE+1 (=MC-ANFANGS-ADR) ; MQI 3000 ;GESETZTE ADR BEI 'EDAS'-CALL AUS MENU ;EDAS-ANFADR:3000H ODER MIT M022 6000H ;EDAS-ENDADR:4000H 8000H ;BEACHTE:-VERFUEGBAREN SPEICHERBEREICH ; -MARKENTABELLE WIRD AB ; EDAS-MCEND-ADR. AUFGEBAUT ; ;MQM MC-ANFADR MC-ENDADR PR1PR2 PA4 ;MQM BA00 BC00 7FDD 1 ; ;PR1/PR2:PROLOGBYTES (MAX. 2 MOEGLICH) ;IM MC WIRD NACH DEN PROLOGBYTES GESUCHT ;EIN ENTSPRECHENDER EINTRAG ERFOLGT IM ;QUELLTEXT ;OHNE ANGABE DER PROLOGBYTES ERFOLGT EIN ;REASSEMBLIERTER TEXTEINTRAG ;PA4: 4. PARAMETER WAHL, OB LADE- ; BEFEHLE MIT MARKE VERSEHEN ; WERDEN SOLLEN ; 0 < PA4 < 100H SEIN (BEI =0 ER- ; FOLGEN KEINE LD-MARKEN-EINTRAEGE ; ;BEACHTE:TABELLEN UND TEXTE IM PROGRAMM ; WERDEN ALS MNEMONIK INTERPRE- ; TIERT UND KOENNEN IN DER ; QUELLE ZU FEHLERN FUEHREN (BSP: ; NORMAL: DEFB 20H ; DEFB 0 ; REASSEMBLIERT: ; JR NZ,UXXXX ; BEI JP,JR,CALL WIRD DIE MARKEN- ; ADRESSE IM OPERANDENTEIL ; EINGETRAGEN MIT 'UXXXX' ;MARKEN WERDEN IM MARKENFELD MIT UXXXX: ;EINGETRAGEN (XXXX=MASCHINENCODE-ADR) ; ;AUSGABE ALLER NICHT VERWENDETEN MARKEN ;IM MARKENFELD AM ENDE DES QUELLTEXTES ;DURCH EQU-ANWEISUNGEN ;STRINGS BEI CALL F003H 23H '....': ;ES KANN EIN STRING VON MAX. 79 ZEICHEN ;EINSCHLIESSLICH RAHMEN DEFM 'STRING' ;VERARBEITET WERDEN ; ;ABBRUCH BEI QUELLSPEICHERUEBERLAUF(AUS- ;GABE <<>> UND SPRUNG ZU EDAS ;ABBRUCH ERFOLGT CA.256 BYTE VOR ;QUELLTEXTSPEICHER-ENDE)-KEINE AUSGABE ;VON EQU-ANWEISUNGEN ! ; ;NACH DER UEBERSETZUNG DES MC WIRD ZU ;EDAS GESPRUNGEN ; ;BEARBEITUNGSHINWEISE: ;-UEBERSETZEN DES MC MIT MQM ;IM EDAS: ;-ASM-TEST ;-SCHRITTWEISE FEHLERBESEITIGUNG BEI ;DER PROGRAMMANALYSE ;-BEACHTE DABEI DIE EQU-EINTRAEGE FUER ; DIE LD-BEFEHLE ; ;*************************************** ; REEDAS EQU 0C0DAH ROM EQU 0CD40H TXTA EQU 40H TXTL EQU 46H MERK1 EQU 0B7FEH MERK2 EQU 0B7FFH DIS EQU 0D72AH ARGN EQU 0B781H ARG1 EQU 0B782H ARG2 EQU 0B784H ARG3 EQU 0B786H ARG4 EQU 0B788H CURSOR EQU 0B7A0H FT1 EQU 0B900H VERT EQU 0F003H MEM1 EQU 4000H MEM2 EQU 8000H CURZ EQU 3CH ;CURSORZEILE TABA EQU 88H ;72 TABE EQU 8AH ;74 MERK3 EQU 8CH ; DEFW 7F7FH DEFM 'MQM' DEFB 1 ; PUSH HL ;MC-ANFADR POP IY PUSH HL LD HL,0FFFFH LD (MERK3),HL LD HL,(72H) LD (TABA),HL LD A,(ARGN) CP 3 JR NC,MQ1 ;>=3 ARGUM. LD HL,0F3F3H LD (ARG3),HL;F3F3-PROLOG JR MQ4 MQ1 LD HL,(ARG3) XOR A CP H ;PROLOGTEST JR Z,MQ2 ;NUR 1 PROLOG CP L JR NZ,MQ4 LD L,H JR MQ3 MQ2 LD H,L MQ3 LD (ARG3),HL ; MQ4: CALL VERT DEFB 23H DEFM 'PASS 1' DEFB 0 POP HL PUSH HL CALL QM ;MTAB AUFBAUEN POP HL LD (ARG1),HL LD DE,(TABA) DEC DE LD (3DH),DE CALL SORT ; CALL VERT DEFB 23H DEFB 8 DEFM '2' DEFW 0D0AH DEFW 0219H DEFB 0 LD A,(0B7A1H);CURSORZEILE LD (CURZ),A LD HL,(TXTA) XOR A LD (MERK1),A LD (MERK2),A LD M,';' INC HL MM0 LD M,0DH INC HL LD M,0AH INC HL LD M,9 INC HL EX DE,HL ;EDAS-TXTADR DE PUSH DE ;UEBERLAUF QUELL PUSH HL LD HL,(42H) DEC H ;256BYTE SICHER OR A SBC HL,DE JR C,MM00 ;UEBERLAUF POP HL POP DE JR MM01 MM00: CALL VERT DEFB 23H DEFW 0A0DH DEFM '<<< NO MEMORY >>>' DEFW 0A0DH DEFB 0 POP HL JP END1 ; MM01: PUSH IY POP HL ;MCADR PUSH HL CALL MARKE ;SUCHE MARKE POP HL PUSH DE ;DE EDAS TXTADR ; LD A,(MERK2) OR A JP NZ,MQQB LD A,(ARGN) CP 3 JP C,MQQ LD DE,(ARG3) LD A,D CP M JR Z,MQ5 LD A,E CP M JP NZ,MQQ MQ5: INC HL CP M JP NZ,MQQ1 POP DE ;EDASTXT DEC DE PUSH HL ;EINTRAG PROLOG LD HL,NA1 LD BC,9 LDIR CALL HAS EX DE,HL LD A,D CP 3AH JR C,MQ51 LD M,30H ;0=>A..D-PROLOG INC HL MQ51 LD M,D INC HL LD M,E INC HL LD M,D INC HL LD M,E INC HL EX DE,HL LD HL,NA2 LD BC,0AH LDIR POP HL INC HL MQ6 LD A,M CP 2 JR C,MQ7 LD (DE),A INC HL INC DE JR MQ6 MQ7 LD A,27H LD (DE),A INC DE PUSH HL LD HL,NA3 LD BC,8 LDIR POP HL PUSH HL LD A,M CALL HAS EX DE,HL LD M,E INC HL EX DE,HL POP HL INC HL PUSH HL POP IY EX DE,HL JP MM0 ; MQQ1: DEC HL MQQ: PUSH HL XOR A CALL 0D8AFH ;BEFEHL POP HL JP Z,MQQ2 ;JP/CALL JP C,MQQ2 ;JR LD A,(ARGN) CP 4 JR C,MQQB LD A,(ARG4) OR A JR Z,MQQB CALL TES JP Z,MQQ2 ;3/4 BYTE ; MQQB: XOR A LD B,A LD C,A LD DE,0 CALL DIS ;DISASS-AUFRUF PUSH IY POP HL LD BC,(ARG2) INC BC AND A SBC HL,BC JP C,MM1 ;MC-ADR < MC-END POP DE DEC DE PUSH DE END: LD DE,(TABA) LD HL,(TABE) OR A SBC HL,DE JR NC,END1 EX DE,HL DEC HL LD A,0FFH CP M JR NZ,EN2 DEC HL CP M JR NZ,EN1 LD (TABA),HL JR END EN1 INC HL EN2 LD B,M DEC HL LD C,M PUSH HL LD HL,(MERK3) OR A SBC HL,BC POP HL JR NZ,EN4 LD (TABA),HL JR END EN4 LD (MERK3),BC POP DE PUSH HL LD H,B LD L,C CALL MAR4 POP HL LD (TABA),HL PUSH BC LD HL,NA4 ;EQU-EINTRAG LD BC,5 LDIR POP HL CALL HEXAS LD A,'H' LD (DE),A INC DE LD HL,NA3 LD BC,2 LDIR PUSH DE ;UEBERLAUF QUELL LD HL,(42H) DEC H ;256BYTE SICHER OR A SBC HL,DE JR C,EN3 ;UEBERLAUF JR END EN3: CALL VERT DEFB 23H DEFW 0A0DH DEFM '<<< NO MEMORY >>>' DEFW 0A0DH DEFB 0 END1: POP HL DEC HL LD M,';' INC HL LD M,0DH INC HL LD M,0AH INC HL LD M,3 ;TEXT-ENDE JP MM4 ; MM1: CALL VERT ;DISASS GIBT DEFB 23H ;MNEMONIK AUF BS DEFB 0BH DEFB 19H DEFB 0 LD DE,(CURSOR) LD A,(CURZ) CP D JR Z,MM2 ;ZEILE = MM25: DEC D ;STRING>40 CALL VERT DEFB 32H POP DE LD B,28 MM21: LD A,M LD (DE),A INC DE INC HL DJNZ MM21 LD A,27H LD (DE),A INC DE PUSH HL LD HL,NA5 LD BC,9 LDIR POP HL LD B,22 MM22: LD A,M LD (DE),A INC DE INC HL CP 27H JR Z,MM23 DJNZ MM22 LD A,27H LD (DE),A INC DE PUSH HL LD HL,NA5 LD BC,9 LDIR POP HL LD B,22 MM28: LD A,M LD (DE),A INC DE INC HL CP 27H JR Z,MM23 DJNZ MM28 LD A,27H LD (DE),A INC DE PUSH HL LD HL,NA5 LD BC,9 LDIR POP HL LD B,7 MM29: LD A,M LD (DE),A INC DE INC HL CP 27H JR Z,MM23 DJNZ MM29 LD A,27H LD (DE),A INC DE MM23: CALL VERT DEFB 23H DEFB 2 DEFB 0BH DEFB 2 DEFB 0 EX DE,HL JP MM0 MM2: CALL VERT DEFB 32H ;TEXT VOM VIDEO- POP DE ;RAM LESEN MM20: LD A,M ;AUF EDAS-TEXT- CP 'D' ;SPEICHER LADEN JR Z,MM31 MM30 LD A,M OR A JR Z,MM3 LD (DE),A INC DE INC HL JR MM30 MM3: CALL VERT DEFB 23H DEFB 2 DEFB 0 EX DE,HL JP MM0 ; MM31 PUSH HL INC HL INC HL INC HL LD A,M CP 'M' POP HL JR NZ,MM30 LD B,28 MM32 LD A,M LD (DE),A INC DE INC HL OR A JR Z,MM3 DJNZ MM32 LD A,27H LD (DE),A INC DE PUSH HL LD HL,NA5 LD BC,9 LDIR POP HL LD B,11 MM33 LD A,M LD (DE),A INC DE INC HL CP 27H JR Z,MM3 DJNZ MM33 JR MM3 ; MM4: LD HL,(TXTA) LD BC,1 MM5 LD A,M CP 3 ;ENDE JR Z,MM7 CP 27H ;" ' " JR NZ,MM52 DEC HL LD A,M INC HL CP 'F' ;AF' JR Z,MM6 MM51 INC HL INC BC LD A,M CP 27H ;DEFM ' ' JR NZ,MM51 MM52 CP 20H JR NZ,MM6 INC HL LD A,M DEC HL CP 20H ;BEI CP JP JR Z,MM6 LD M,9 ;TABULATOR MM6 INC HL INC BC JR MM5 ; MM7: PUSH HL ;END-ADR TEXT LD DE,(TXTL);AKTU.TEXT-ADR PUSH HL LD HL,(42H) XOR A SBC HL,DE POP HL JR Z,MM71 POP HL LD (HL),';' PUSH HL MM71 LDDR ;UMLADEN AUF POP HL ;EDAS-ARBEITS- ;BEREICH INC DE LD (TXTL),DE;ANF-ADR. TEXT JP 0C0DAH ;ROM CD40H ;SONST 0C0DAH ; MQQ2: PUSH HL LD A,0CDH CP M JR NZ,MQQ22 INC HL LD A,3 CP M JR NZ,MQQ22 INC HL LD A,0F0H CP M POP HL JP Z,MQQB PUSH HL MQQ22 POP HL XOR A LD B,A LD C,A LD DE,0 CALL DIS CALL 0F003H DEFB 23H DEFB 0BH DEFB 19H DEFB 0 LD DE,(CURSOR) LD A,(CURZ) CP D ;2 BS-ZEILEN-$ JP NZ,MM25 CALL 0F003H DEFB 32H POP DE ;EDASTXT MQQY LD A,M ; OR A ; JR Z,MQQX1 CP 30H JR Z,MQQX LD (DE),A INC HL INC DE JR MQQY MQQX LD A,'U' MQQY1 LD (DE),A INC DE INC HL LD A,M CP 'H' JR NZ,MQQY1 INC HL MQQY3 LD A,M OR A JR Z,MQQX1 LD (DE),A INC DE INC HL JR MQQY3 MQQX1 CALL 0F003H DEFB 23H DEFB 2 DEFB 0 EX DE,HL JP MM0 ; HAS: LD B,A ;HEX->ASCII AND 0F0H ;PE:A=HEXZAHL RLCA ;PA:H=ASCII-ZAHL RLCA ; BIT4-7 RLCA ; L=BIT0-3 RLCA ADD 30H CP 3AH JR C,HAS1 ADD 7 HAS1 LD H,A LD A,B AND 0FH ADD 30H CP 3AH JR C,HAS2 ADD 7 HAS2 LD L,A RET ; ; ;GENERIERE MARKENTABELLE ; QM: LD HL,(72H) LD (TABE),HL QM0 LD HL,(ARG1) PUSH HL LD DE,(ARG2) OR A SBC HL,DE POP HL JR C,QM1 RET QM1 LD DE,(ARG3) LD A,M CP D JR Z,QM4 CP E JR Z,QM5 QMM1 PUSH HL CALL 0D8AFH POP HL JR NZ,QM6 PUSH HL LD A,M CP 0CDH JP NZ,QM11 INC HL LD A,M CP 3 JR NZ,QM11 INC HL LD A,M CP 0F0H JR NZ,QM11 INC HL LD A,M CP 23H JP NZ,QM12 LD C,3 LD B,,0 POP HL ADD HL,BC QM21 INC HL LD A,M OR A JR NZ,QM21 JR QM31 QM2 LD B,0 POP HL ADD HL,BC QM3 INC HL LD A,M CP 2 JR NC,QM3 QM31 INC HL LD (ARG1),HL JR QM0 QM4 PUSH HL INC HL LD A,M CP D LD C,1 JR Z,QM2 POP HL JR QMM1 QM5 LD D,E JR QM4 QM6 JR C,QM8 ;JR PUSH HL LD A,(ARGN) CP 4 JR C,QM61 LD A,(ARG4) OR A JR Z,QM61 CALL BEF JR Z,QM11 QM61: POP HL QM7 LD C,B LD B,0 ADD HL,BC LD (ARG1),HL JP QM0 QM8 PUSH HL PUSH BC INC HL LD A,M INC HL LD B,0 LD C,A BIT 7,A JR Z,QM10 NEG LD C,A OR A SBC HL,BC QM81 EX DE,HL QM9 LD HL,(TABE) DEC HL LD M,D DEC HL LD M,E LD (TABE),HL POP BC POP HL JR QM7 QM10 ADD HL,BC JR QM81 QM11 POP HL PUSH HL PUSH HL CALL 0D8AFH LD A,B CP 4 POP HL JR NZ,QM13 INC HL QM13 PUSH BC INC HL LD E,(HL) INC HL LD D,(HL) JR QM9 QM12 POP HL LD B,4 JR QM7 ; ;HEX->ASCII PE:HL=HEX,DE=ADR ; HEXAS: CALL HEAS1 PUSH HL LD H,L CALL HEAS1 POP HL RET HEAS1 LD A,H AND 0F0H RRCA RRCA RRCA RRCA ADD 30H CP 3AH JR C,HEAS2 ADD 7 HEAS2 LD (DE),A INC DE LD A,H AND 0FH ADD 30H CP 3AH JR C,HEAS3 ADD 7 HEAS3 LD (DE),A INC DE RET ; SORT: PUSH HL PUSH DE PUSH BC LD DE,(TABE) LD HL,(TABA) OR A SBC HL,DE JR Z,SORE OR A RR H RR L LD B,H LD C,L SOR0 DEC BC LD A,B OR C JR NZ,SOR1 SORE POP BC POP DE POP HL RET SOR1 PUSH BC LD H,D LD L,E SOR3 PUSH BC PUSH DE INC HL INC HL PUSH HL EX DE,HL LD A,M INC HL LD H,M LD L,A LD A,(DE) LD C,A INC DE LD A,(DE) LD B,A OR A SBC HL,BC POP HL POP DE JR NC,SOR5 LD A,(DE) LD B,M EX DE,HL LD M,B LD (DE),A EX DE,HL INC DE INC HL LD A,(DE) LD B,M EX DE,HL LD M,B LD (DE),A EX DE,HL DEC DE DEC HL SOR5 POP BC DEC BC LD A,B OR C JR NZ,SOR3 INC DE INC DE POP BC JR SOR0 ; ; SUCHE MARKE IN MTAB UND EDAS- ; EINTRAG Uxxxx: MARKE: PUSH DE ;EDAS PUSH HL ;MCADR LD DE,(3DH);MTAB-ZELLE LD HL,(TABE) DEC HL OR A SBC HL,DE JR C,MAR1 POP HL MAR0 POP DE MAR00 RET MAR1 POP HL ;MCADR MAR2 LD A,(DE) LD B,A DEC DE LD A,(DE) LD C,A ;BC=MARKE PUSH HL OR A SBC HL,BC POP HL JR Z,MAR3 ;MC=MARKE JR C,MAR0 ;MCMARKE JR MAR2 MAR3 DEC DE LD (3DH),DE POP DE ;EDASTXT DEC DE MAR4 LD A,'U' LD (DE),A INC DE CALL HEXAS LD A,':' LD (DE),A INC DE LD A,9 LD (DE),A INC DE PUSH DE LD DE,(3DH) LD A,0FFH INC DE LD (DE),A INC DE LD (DE),A POP DE JR MAR00 ; ;TEST AUF 3/4-BYTE LADEBEFEHLE ; BEF: PUSH HL PUSH BC PUSH DE JR TEST1 TES: PUSH HL PUSH BC PUSH DE PUSH IY POP HL TEST1 PUSH HL CALL 0D8AFH POP HL LD A,B CP 3 JR NC,TES1 TES0 POP DE POP BC POP HL AND A ;Z=0 RET TES1 LD A,M CP 0DDH JR Z,TES4 CP 0FDH JR Z,TES4 CP 0EDH JR Z,TES5 CP 1 JR NZ,TES3 TES2 POP DE POP BC POP HL XOR A ;Z=1 RET TES3 CP 11H JR Z,TES2 CP 21H JR Z,TES2 CP 31H JR Z,TES2 CP 22H JR Z,TES2 CP 2AH JR Z,TES2 CP 32H JR Z,TES2 CP 3AH JR Z,TES2 JR TES0 TES4 INC HL LD A,M CP 21H JR Z,TES2 CP 22H JR Z,TES2 CP 2AH JR Z,TES2 JR TES0 TES5 INC HL LD A,M CP 43H JR Z,TES2 CP 53H JR Z,TES2 CP 73H JR Z,TES2 CP 4BH JR Z,TES2 CP 5BH JR Z,TES2 CP 7BH JR Z,TES2 JR TES0 ; NA1: DEFM ';' DEFB 0DH DEFB 0AH DEFB 9 DEFM 'DEFW' DEFB 9 NA2: DEFM 'H' NA5: DEFB 0DH DEFB 0AH DEFB 9 DEFM 'DEFM' DEFB 9 DEFB 27H NA3: DEFB 0DH DEFB 0AH DEFB 9 DEFM 'DEFB' DEFB 9 NA4: DEFM 'EQU' DEFB 9 DEFB 30H ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ