013
26.02.2023, 20:34 Uhr
Lötspitze
|
Guten Abend Tino,
na das ist doch schon mal ein Anfang. Ich bin leider nicht der große Assembler-Programmierer. Könntest Du mir deshalb bitte erklären, was BWSAZ ist und wo die Werte 0xC0h und 0xE0h herkommen bzw. auf welche Art und Weise sie der unterschiedlichen Spaltenanzahl zugeordnet wurden?
Im SCP werden hier ja auch Werte definiert, u.a. 0x0Dh für CR und 0x0Ah für LF:
Quellcode: | KTAB: DB 8 ;BACKSTEP DB 9 ;CURSOR RECHTS DB 0CH ;CLS DB 16H ;LOESCHEN ZEILENREST DB 18H ;LOESCHEN ZEILE,CURSOR ANF.Z. DB 1AH ;CURSOR NACH OBEN DB 14H ;LOESCHEN BILDSCHIRMREST DB 82H ;KURSOR EIN DB 83H ;KURSOR AUS DB 0DH ;CR DB 0AH ;LF DB 1 ;CURSOR LINKS OBEN DB 7 ;BEEP DB 15H ;CURSOR RECHTS DB 84H ;ZEICHEN NORMAL DB 85H ;ZEICHEN INVERS DB 86H ;ZEICHEN INTENSIV DB 87H ;ZEICHEN INTENSIV INVERS |
Verwendet wird das (0Ch, 0Dh und 0Ah) u.a. bei der Ausschrift während des SCP-Kaltstarts:
Quellcode: | ;KALTSTART ; MT1: DB 0CH,0DH,0AH,0AH DB ' CP/M 2.2 Z1013 IG-HC',0DH,0AH,0AH DB ' mit 2*256K RAM-Floppy V. 2.4',0DH,0AH,0AH,0AH DB 'RAM-Floppy loeschen? (K)',0DH,0AH DB 'RAM-Floppy laden? (L) :',0 MT2: DB 0DH,0AH,'A oder B ? :',0 MT3: DB 0DH,0AH,0AH,'weiter mit CP/M? (N)',0 MT4: DB 0DH,0AH,0AH,'RAM-Floppy laden? (Y)',0 MT5: DB 0DH,0AH,0AH,'RAM-Floppy saven? (Y)',0 MT6: DB 0DH,0AH,0AH |
Auch das funktioniert dann aber bei 80x24 schon nicht mehr richtig. Die Ausschriften sind nicht mehr am linken Bildrand wie bei 64x32.
Nun noch mal der gesamte Ausschnitt der Cursor-Steuerung. Ich denke, irgendwo hier liegt das Problem:
Quellcode: | ;ZEICHEN VON TASTATUR <A> ; CONIN: CALL CHIT RST 20H DB 1 PUSH AF CALL CHTI POP AF RET ; ;CHANGE AKTLWE/TAPUF ; CHIT: LD A,(AKTLW) LD (IOBPF),A LD A,(TAPUF) CHRET: LD (AKTLW),A RET ; CHTI: LD A,(AKTLW) LD (TAPUF),A LD A,(IOBPF) JR CHRET ; ;ZEICHEN AUF BILDSCHIRM <C> ; COOUT: PUSH AF PUSH HL PUSH BC PUSH DE CALL ZAG POP DE POP BC POP HL POP AF RET ; ZAG: LD A,(MLZBS) ;MERKE LETZTES ZEICHEN CP 1BH JP Z,ANKXY LD A,1BH CP C JP Z,MESC LD A,C OR A RET Z CP 88H JR C,ZAG5 AND 7FH ZAG5: LD HL,KTAB LD BC,LKTAB-KTAB ;Laenge CPIR ;SUCHEN NACH ST.-ZEICHEN JR NZ,ZAG1 DEC HL LD BC,KTAB AND A ;CY=0 SBC HL,BC SLA L LD BC,FTAB ADD HL,BC LD C,(HL) INC HL LD H,(HL) LD L,C JP (HL)
KTAB: DB 8 ;BACKSTEP DB 9 ;CURSOR RECHTS DB 0CH ;CLS DB 16H ;LOESCHEN ZEILENREST DB 18H ;LOESCHEN ZEILE,CURSOR ANF.Z. DB 1AH ;CURSOR NACH OBEN DB 14H ;LOESCHEN BILDSCHIRMREST DB 82H ;KURSOR EIN DB 83H ;KURSOR AUS DB 0DH ;CR DB 0AH ;LF DB 1 ;CURSOR LINKS OBEN DB 7 ;BEEP DB 15H ;CURSOR RECHTS DB 84H ;ZEICHEN NORMAL DB 85H ;ZEICHEN INVERS DB 86H ;ZEICHEN INTENSIV DB 87H ;ZEICHEN INTENSIV INVERS LKTAB: FTAB: DW BSTP DW CURR DW CLS DW DELLN DW INSLN DW ZRET DW CLCU DW CZSET DW PUABL DW CR DW OUTLF DW CHOME DW BEEPA DW CURR DW NORM DW INV DW ND DW ND ; ;AUSGABE ZEICHEN <> STEUERET ZEICHEN ; ZAG1: AND 7FH LD HL,(CURSR) PUSH AF LD A,(MINV) LD B,A POP AF OR B ;INVERS, WENN 80H LD M,A INC HL EX DE,HL LD HL,BWSE+1 XOR A SBC HL,DE EX DE,HL JR NZ,ZAG2 ZAG3: LD DE,BWSA LD HL,BWSA+SPALT LD BC,BWSE-BWSA+1-SPALT LDIR PUSH DE POP HL PUSH HL INC DE LD (HL),' ' LD BC,SPALT-1 LDIR LD HL,(SOIL) LD DE,SPALT XOR A SBC HL,DE LD (SOIL),HL POP HL ZAG2: LD A,(HL) LD (CZSP),A LD (HL),0FFH LD (CURSR),HL ND: RET ; ;BACKSTEP BSTP: CALL PUABL DEC HL JR ZAG2 ; ;CURSOR RECHTS CURR: CALL PUABL INC HL LD DE,BWSE EX DE,HL OR A SBC HL,DE EX DE,HL LD A,' ' JP C,ZAG1 JR ZAG2 ; ;BS-LOESCHEN CLS: LD HL,BWSA LD (HL),' ' LD BC,BWSE-BWSA LD DE,BWSA+1 LDIR LD A,' ' LD (CZSP),A JP CHOME ; ;WAGENRUECKLAUF CR: LD HL,(CURSR) LD A,SPALT-1 CPL AND L LD L,A JP SETCU ; ;BEEP-AUSGABE BEEPA: LD BC,0A040H ;BEEP ARG. CALL BEEP RET ; ;LINE-FEED OUTLF: LD DE,BWSE LD HL,(CURSR) LD BC,SPALT ADD HL,BC EX DE,HL SBC HL,DE ;ENDE-NEUE EX DE,HL JP NC,SETCU CALL PUABL ;PUFFER AUFBLENDEN CALL ZAG3 RET ; ;CURSOR-HOME CHOME: LD DE,BWSA LD HL,(CURSR) OR A SBC HL,DE RET Z EX DE,HL JP SETCU ; ;LOESCHEN BS AB CURSOR CLCU: LD BC,(CURSR) LD HL,BWSE SBC HL,BC ;HL:=ANZ.ZEICH.BIS BWS-ENDE MDFAA: LD DE,1 LD A,' ' LD BC,(CURSR) MDFB3: LD (BC),A INC BC SBC HL,DE JP NZ,MDFB3 MDFBA: LD HL,(CURSR) LD (HL),0FFH ;CURSOR RET ; ;LOESCHEN ZEILE DELLN: LD HL,(CURSR) LD A,L AND SPALT-1 ;A=SPALTENPOS. LD B,A LD A,SPALT-1 SUB B RET Z LD B,A ;ANZ.BIS ENDE ZEILE LD A,' ' LD (CZSP),A DELL1: INC HL LD (HL),' ' DJNZ DELL1 RET ; ;INSERT IN ZEILE INSLN: CALL CR LD A,(CZSP) LD (HL),A LD D,H LD E,L INC DE LD BC,SPALT-1 LDIR LD HL,(CURSR) LD (HL),0FFH LD A,' ' LD (CZSP),A RET ; ZRET: LD B,SPALT ZR1: PUSH BC CALL BSTP POP BC DJNZ ZR1 RET ; CZSET: LD A,0FFH CZS1: LD HL,(CURSR) LD (HL),A RET ; PUABL: LD A,(CZSP) JR CZS1 ; ; INV: LD A,80H INV1: LD (MINV),A RET ; NORM: XOR A JR INV1 ; ;MERKE ESCAPE-ANKUENDIGUNG MESC: LD A,C LD (MLZBS),A RET ; ;CURSOR-DIREKT-POSITIONIERUNG ANKXY: LD A,(MSEQU) CP 0FFH JP Z,SETXY LD A,0FFH LD (MSEQU),A LD A,C AND 5FH LD (MZEIP),A RET ; SETXY: LD A,C CP 3DH ;ADM3A-TERMINAL RET Z CP 59H RET Z AND 7FH LD (MSPAP),A LD C,A XOR A LD (MLZBS),A LD (MSEQU),A LD HL,BWSA LD B,0 ADD HL,BC LD A,(MZEIP) OR A ;ZEILE 0? JP Z,SETCU LD C,0 LD B,A LD D,0 LD E,SPALT ;SPALTENZAHL ZINC: ADD HL,DE DJNZ ZINC SETCU: PUSH HL LD DE,BWSE SCF SBC HL,DE POP HL JR C,SETC1 EX DE,HL SETC1: LD DE,(CURSR) LD A,(CZSP) LD (DE),A LD A,M ;VERDECKTES ZEICHEN LD (CZSP),A LD M,0FFH ;NEUER CURSOR LD (CURSR),HL RET ; ;AUSGABE NEUE ZEILE NL: PUSH BC PUSH AF LD C,0DH CALL COOUT LD C,0AH CALL COOUT POP AF POP BC RET ; |
-- ___________________ ...geboren, um zu löten.
Wer rennen soll, muß auch mal stolpern dürfen. |