D004ROM ASM ;********************************** ;*** *** ;*** D004-EPROM reassembliert *** ;*** von haftmann#software *** ;*** und $ieber$oft *** ;*** 25.02.93 / 28.02.93 *** ;*** *** ;********************************** ORG 0E000H ;In Abarbeitung ist der ROM fast stets ;auf AAdr E000h geschaltet; in den ;RAM kopierte Bereiche werden wie im ;RAM stehend assembliert, stehen jedoch ;hintereinander im EPROM RESET EQU RESET PV1 EQU 0F003H PV3 EQU 0F009H RC EQU 0F00FH IRMON EQU 0F018H IRMOFF EQU 0F01BH JP RDARG DOSIN ;Start DI LD A,(0B781H) CP 2 JR NC,RDARG LD A,2 OUT 0F4H,A XOR A ;D004 in OUT 0F4H,A ;Dauer-RESET LD E,3 LD BC,0F1H KRL1 XOR A ;Koppelram OUT (C),A ;l|schen DJNZ KRL1 INC C DEC E JR NZ,KRL1 LD HL,RBOOT;Urlader LD BC,1F0H ;=FC00h LD DE,200H URLD1 OUTI ;Urlader INC B ;in Koppelram INC B ;kopieren DEC E JR NZ,URLD1 INC C LD E,22H DEC D JR NZ,URLD1 LD A,1 OUT 0F4H,A XOR A ;Start D004 OUT 0F4H,A DEC D ;D=FFh UROK1 LD BC,0B3F3H ;=FFB3h IN A,(C) ;>UROK< AND A ;0=TimeOut JR NZ,FINDMD ;1=PC-Mode LD B,0 ;2=Not Ready UROK2 DJNZ UROK2 ;3=Can't Read DEC DE ;4=No System LD A,E ;5=CAOS-Mode OR D JR NZ,UROK1 ;Warten ;TimeOut LDERRM LD HL,RERRM LD DE,ERRM ;Zieladr. LD BC,RV24I-RERRM CP 0FFH JR NZ,LDERR1 XOR A LDERR1 LDIR JP 0 ;anspringen ; RDARG LD A,(0B784H);ARG2 AND A JP NZ,JPARG LD BC,0B3F3H ;=FFB3h IN A,(C) ;>UROK< CP 5 JP Z,CAOSMD CP 1 JR Z,PCMD LDERR2 JR LDERRM ; FINDMD CP 5 JP Z,CAOSMD CP 1 JR NZ,LDERRM PCMD LD HL,RCAOSON LD DE,CAOSON LD BC,RZAS-RCAOSON LDIR ;CAOS-Schalter kopieren ; LD HL,RGAT LD DE,GAT LD BC,RCAOSON-RGAT LDIR ;Adre~tabellengenerie- ;rungsprogramm kopieren LD BC,PCMD1 ;Fortsetzung LD HL,GAT ;Ansprung PCMD0 PUSH BC LD BC,CAOSOFF PUSH BC JP CAOSON PCMD1 LD HL,RV24I LD DE,V24INI LD BC,RV24D-RV24I LDIR ;Ausgabeprogramm LD BC,PCMD2 LD HL,V24INI JR PCMD0 PCMD2 LD HL,RV24D LD DE,V24DUP LD BC,RSIOT-RV24D LDIR ;Eingabeprogramm LD BC,PCMD3 LD HL,V24DUP JR PCMD0 PCMD3 LD HL,RZAS LD BC,0CFBH ;fiktive L{nge LD DE,ZAS LDIR ;Zentrale Abfrageschl. LD HL,ICTC3 ;Tastatur-CTC LD (1EEH),HL LD HL,IPIOB ;Tastatur-PIO LD (1E6H),HL LD (IX+7),1 LD (IX+8),80H XOR A LD (WS+8),A EI LD A,38H LD (0B7D6H),A;FARB LD BC,0B4F3H ;=FFB4 LD HL,KTAB ;>KTABAD< OUT (C),L INC B OUT (C),H LD HL,0 LD (0B7A0H),HL ;Cursorpos LD HL,ESCTAB INC B INC B OUT (C),L ;BC=FFB7 INC B ;>ESCTAB< OUT (C),H LD HL,PCMD4 PUSH HL LD HL,CAOSOFF LD DE,0E011H ;KC85/4? JP CAOSON PCMD4 LD A,7FH CP D JR Z,JAKC4 XOR A ;0 f}r KC/3 JAKC4 LD (WS+10),A ;eintragen ;Modulschlucktabelle erstellen LD HL,3CFFH ;Endadresse LD E,0 AND A JR Z,JAKC3 LD M,3 ;2 RAM8-Ebenen DEC HL ;des KC85/4 LD M,7 DEC HL LD M,3 DEC HL LD M,0BH DEC HL LD E,2 JAKC3 LD BC,880H MOSU1 IN A,(C) CP 0F6H ;64K? JR Z,MO64K CP 0F4H ;16K? JR Z,MO16K CP 79H ;256K? JR Z,MO256K CP 7AH ;512K? JR Z,MO512K CP 78H ;128K? JR Z,MO128K CP 7BH ;1M? JR Z,MO1M MOSU2 INC B JR NZ,MOSU1 LD BC,0B2F3H ;=FFB2h OUT (C),E ;>SIZE< LD A,(WS+10) AND A ;KC85/3? JR Z,MOSU3 LD HL,RKC4OVL LD DE,ROLL LD BC,RKC4OV2-RKC4OVL LDIR LD DE,CUCP2 LD C,RKC4OV3-RKC4OV2 LDIR LD DE,CRT803 LD C,RKC4OVE-RKC4OV3 LDIR MOSU3 CALL QCLS LD HL,ZAS JP CAOSON MO64K LD C,4 LD D,40H LD A,3 MOSU4 LD M,B DEC HL LD M,A ADD D DEC HL INC E DEC C JR NZ,MOSU4 LD C,80H JR MOSU2 MO16K PUSH HL LD H,0B8H ;War 16k-RAM LD L,B ;als RAM4 LD A,M ;geschaltet? POP HL ;(bei KC85/3) AND 0C1H CP 41H JR Z,MOSU2 LD C,1 MOSU5 LD A,83H JR MOSU4 ; MO128K LD C,8 ;Segmente JR MOSU6 ; MO256K LD C,16 ;Segmente MOSU6 LD D,4 JR MOSU5 ; MO1M LD C,64 ;Segmente JR MOSU6 ; MO512K LD C,32 ;Segmente JR MOSU6 ;****************************** ;** Beginn der RAM-Programme ** ;****************************** RGAT ORG 200H GAT ;Generierung Adre~tabelle LD A,2 ;2 H{lften LD DE,3D00H LD HL,800H ;Linke H{lfte GAT1 LD C,24 ;Zeilen (1920) PUSH AF GAT2 LD B,8 GAT3 PUSH HL PUSH DE CALL PV1 DB 34H ;PADR POP DE LD A,L LD (DE),A INC DE LD A,H LD (DE),A INC DE POP HL INC H DJNZ GAT3 INC H INC H DEC C JR NZ,GAT2 POP AF LD HL,820H ;Rechte H{lfte DEC A JR NZ,GAT1 RET ORG RGAT+$-GAT RCAOSON ORG 370H CAOSON IN A,88H SET 0,A OUT 88H,A JP (HL) CAOSOFF LD A,(DE) LD D,A IN A,88H RES 0,A OUT 88H,A RET ORG RCAOSON+$-CAOSON RZAS ORG 400H ZAS ;Zentrale Abfrageschleife LD BC,0A7F3H ;=FFA7 IN E,(C) ;>OUTPTR+1< DEC B IN A,(C) CP E LD D,A JR NZ,ZAS1 LD A,(WS+7) AND A JR NZ,ZAS3 CALL CUCP LD A,1 LD (WS+7),A JR ZAS3 ; ZAS1 LD A,(WS+7) BIT 0,A JR Z,ZAS2 CALL CUCP XOR A LD (WS+7),A ZAS2 LD A,20H ADD D INC D PUSH BC LD B,A IN A,(C) LD L,0 CALL IOPV POP BC JR C,ZAS3 LD A,D AND 1FH OUT (C),A ZAS3 LD B,0A1H IN E,(C) DEC B IN D,(C) LD A,D INC A AND 1FH LD L,A CP E JR Z,ZAS4 CALL KBD JR Z,ZAS4 PUSH BC LD B,D OUT (C),A POP BC OUT (C),L ZAS4 LD B,0A9H IN E,(C) DEC B IN D,(C) LD A,D CP E JR Z,ZAS5 LD A,40H ADD D INC D PUSH BC LD B,A IN A,(C) LD L,3 CALL IOPV POP BC LD A,D AND 1FH OUT (C),A ZAS5 LD B,0ADH IN A,(C) AND A JR Z,ZAS6 XOR A OUT (C),A LD B,0A5H IN E,(C) DEC B IN D,(C) LD A,D INC A AND 1FH LD L,A CP E JR Z,ZAS6 PUSH HL LD L,2 CALL IOPV POP HL PUSH BC LD H,A LD A,60H ADD D LD B,A OUT (C),H POP BC OUT (C),L ZAS6 LD B,0ABH IN E,(C) DEC B IN D,(C) LD A,D CP E JR Z,ZAS7 LD A,80H ADD D INC D PUSH BC LD B,A IN A,(C) LD L,1 CALL IOPV POP BC LD A,D AND 1FH OUT (C),A ZAS7 LD B,0B2H IN L,(C) DEC B IN H,(C) LD A,H CP 2 JR C,ZAS9 DEC B IN D,(C) DEC B IN E,(C) INC B INC B LD A,L INC E CP E JR NC,SECT LD A,0 ZAS8 OUT (C),A ZAS9 JP ZAS SECT ;Sektor lesen/schreiben ;E: Modulnummer ;D: Sektornummer ;H: Steuerbyte 6=Read 4=Write PUSH BC LD C,E DEC C LD E,H LD HL,3CFFH LD B,0 AND A SBC HL,BC SBC HL,BC LD B,M ;Schacht DEC HL LD A,M ;Steuerbyte PUSH DE LD L,B LD D,A LD E,A LD A,2 CALL PV1 DB 26H IN A,88H RES 2,A ;IRM aus OUT 88H POP DE PUSH HL LD C,D LD B,0 LD A,7 ;Siebenmal SEC1 SLA C RL B DEC A ;ungenial JR NZ,SEC1 LD HL,8000H ADD HL,BC LD A,E CP 6 LD C,0F2H JR Z,SEC4 LD E,80H ;CP/M-Sektor LD BC,1F2H SEC2 OUTI ;besser w{re INC B ;OTDR INC B DEC E JR NZ,SEC2 SEC3 POP HL IN A,88H SET 2,A ;IRM ein OUT 88H LD D,0 LD E,D LD A,2 CALL PV1 DB 26H POP BC XOR A JR ZAS8 ; SEC4 LD B,0 LD E,80H ;CP/M-Sektor SEC5 INI ;besser w{re INC B ;INDR INC B DEC E JR NZ,SEC5 JR SEC3 ; IOPVTB ;I/O-Programmverteiler-Tabelle DW CRT,CRT,PRINT,V24OT DW V24OT,PRINT,USO2,USO3 DW V24IN,DUMMY,USI2,USI3 DW PRINT,CRT,V24OT,USO2 DUMMY RET IOPV ;I/O-Programmverteiler PUSH DE PUSH AF LD A,L PUSH BC LD B,0ACH ;BC=FFAC IN C,(C) ;>IOBYTE< LD B,A LD HL,IOPVTB AND A LD A,C JR Z,IOPV2 IOPV1 RRCA RRCA INC HL ;+8 INC HL INC HL INC HL INC HL INC HL INC HL INC HL DJNZ IOPV1 IOPV2 AND 3 JR Z,IOPV4 IOPV3 INC HL INC HL DEC A JR NZ,IOPV3 IOPV4 LD A,M INC HL LD H,M LD L,A POP BC POP AF CALL JPHL POP DE RET JPHL JP (HL) USO2 LD E,2 DB 21H ;LD HL, USO3 LD E,3 DB 21H USI2 LD E,6 DB 21H USI3 LD E,7 JP PV3 ICTC3 ;ISR CTC Kanal 3 Tastatur EI PUSH AF LD A,23H OUT 8FH,A XOR A LD (IX+13),A LD (IX+11),0FFH JR TI4 IPIOB ;ISR PIO Port B Tastatur EI PUSH AF IN A,8FH PUSH AF LD A,0A7H OUT 8FH LD A,8FH OUT 8FH POP AF CP 14H JR C,TI4 CP 65H JR NC,TI5 CP 44H JR NC,TI6 PUSH HL PUSH DE LD DE,KTAB SRL (IX+12) AND A LD A,(IX+12) LD H,A RRA LD L,A ADD A ADD L BIT 6,(IX+8) JR Z,TI1 ADD 2 JR TI2 ; TI1 LD L,A LD A,(IX+8) RLCA XOR H AND 1 ADD L TI2 LD L,A LD H,0 ADD HL,DE POP DE LD A,M POP HL LD (IX+13),A LD A,(IX+0CH) CP (IX+11) JR Z,TI8 LD (IX+11),A RES 4,(IX+8) TI3 SET 0,(IX+8) LD (IX+10),0 RES 6,(IX+8) TI4 IN A,89H OUT 89H POP AF RETI ; TI5 OR A ;Total JR TI7 ;unintelligent! ; TI6 SCF TI7 RR (IX+12) JR TI4 ; TI8 BIT 2,(IX+8) JR NZ,TI4 LD A,3 CP (IX+13) JR Z,TI4 INC (IX+10) BIT 4,(IX+8) JR NZ,TI9 BIT 3,(IX+10) JR Z,TI4 SET 4,(IX+8) JR TI3 ; TI9 BIT 0,(IX+10) JR NZ,TI3 JR TI4 KTAB ;Tastaturumcodierungstabelle ;Aufbau: 1 Byte ohne SHIFT ; 1 mit SHIFT ; 1 mit CONTROL DB 'W','w',17H DB 'A','a',1 DB '2','"','|' DB 8,1,8 ;CUL DB 84H,85H,86H ;HOME DB '-','=',' ' DB 0F2H,0F8H,0F1H ;F2 DB 'Y','y',19H DB 'E','e',5 DB 'S','s',13H DB '3','#','}' DB '^','~',1EH DB 10H,87H,88H ;CLR DB ':','*',' ' DB 0F3H,0F9H,0F7H ;F3 DB 'X','x',18H DB 'T','t',14H DB 'F','f',6 DB '5','%','\' DB 'P','p',10H DB 7FH,19H,89H ;DEL DB '0',40H,'~' DB 0F5H,0FBH,83H ;F5 DB 'V','v',16H DB 'U','u',15H DB 'H','h',8 DB '7',27H,' ' DB 'O','o',0FH DB 16H,8AH,8BH ;INS DB '9',')',8CH DB 3,3,8EH ;BRK DB 'N','n',0EH DB 'I','i',9 DB 'J','j',0AH DB '8','(',' ' DB ' ',9,' ' ;SPC DB 'K','k',0BH DB ',','<',' ' DB 13H,11H,8FH ;STOP DB 'M','m',0DH DB 'Z','z',1AH DB 'G','g',7 DB '6','&',']' DB 20H,20H,20H ;TA44 DB 'L','l',0CH DB '.','>',' ' DB 0F6H,0FCH,' ' ;F6 DB 'B','b',2 DB 'R','r',12H DB 'D','d',4 DB '4','$','[' DB '_','|',1FH DB '+',';',' ' DB '/','?',' ' DB 0F4H,0FAH,82H ;F4 DB 'C','c',3 DB 'Q','q',11H DB 90H,90H,90H ;SHL DB '1','!','{' DB 18H,3,18H ;CUD DB 5,12H,5 ;CUU DB 4,6,4 ;CUR DB 91H,1BH,91H ;F1 DB 0DH,0DH,0DH ;ET KBD ;Tastaturroutine PUSH HL PUSH DE PUSH BC BIT 3,(IX+7) ;F-Taste? JR NZ,KBD9 KBD1 BIT 0,(IX+8) JR Z,KBD7 LD A,(IX+13) RES 0,(IX+8) CP 0F1H JR C,KBD5 SET 3,(IX+7) SUB 0F0H LD B,A LD HL,0B900H KBD3 LD A,M INC HL AND A JR NZ,KBD3 DJNZ KBD3 LD A,M AND A JR Z,KBD10 INC HL KBD4 LD (0B7D1H),HL KBD5 BIT 4,(IX+7) JR NZ,KBD8 CP 81H JR NC,KBD12 BIT 5,(IX+8) JR Z,KBD6 LD HL,23H LD (0B782H),HL LD L,0AH LD (0B786H),HL LD L,0 LD (0B784H),HL PUSH AF CALL PV1 DB 35H ;TON LD A,0AH CALL PV1 DB 14H ;WAIT LD A,3 OUT 8CH,A ;CTC tot POP AF KBD6 AND A KBD7 JP POPS3 ; KBD8 LD HL,(WB) ;*?* RES 4,(IX+7) JR KBD13 ; KBD9 LD A,(IX+13) CP 3 JR NZ,KBD11 KBD10 RES 3,(IX+7) JR KBD1 ; KBD11 LD HL,(0B7D1H) LD A,M INC HL AND A JR NZ,KBD4 JR KBD10 ; KBD12 LD HL,CTAB1 SUB 82H RLCA ;*2 LD E,A LD D,0 ADD HL,DE LD E,M INC HL LD D,M EX DE,HL RES 4,(IX+7) RES 0,(IX+8) KBD13 LD DE,720H ;*?* PUSH DE JP (HL) CTAB1 ; DW CUP82,CUP83,CUP84,CUP85 DW CUP86,CUP87,CUP88,CUP89 DW CUP8A,CUP8B,CUP8C,CUP8D DW CUP8E,CUP8F,CUP90,CUP91 CUP89 PUSH DE CALL QCLS POP DE CALL CUCP JP ESCP ; CUP84 LD B,4 CUPX LD A,(IX+8) XOR B LD (IX+8),A RET ; CUP90 LD B,80H JR CUPX ; CUP91 LD B,40H JR CUPX ; CUP8A LD B,20H JR CUPX ; CUP86 LD HL,UNX1 UCX1 LD (WB),HL UCX2 SET 4,(IX+7) RET ; UNX1 CALL UNX3 JR C,UCX2 JP ESCO ; CUP88 LD HL,UNX2 JR UCX1 ; UNX2 CALL UNX3 JR C,UCX2 JP ESCN ; CUP8F LD HL,UNX6 JR UCX1 ; UNX6 CALL UNX3 JR C,UCX2 RLCA RLCA RLCA RLCA LD (WB+2),A LD HL,UNX7 JR UCX1 ; UNX7 CALL UNX3 JR C,UCX2 LD E,A LD A,(WB+2) ADD E POP DE JP KBD6 ; UNX3 SUB 30H RET C CP 0AH CCF RET NC AND 5FH SUB 7 CP 10H CCF RET ; CUP8D LD HL,CUP8D1 JR UCX1 ; CUP8D1 CP 8DH RET NZ LD A,4 ;NMI? CUP8E1 OUT 0F4H,A XOR A OUT 0F4H,A RET ; CUP8E LD A,8 ;RESET? JR CUP8E1 ; CUP87 LD A,0FH JP CRT2 ; WB DS 3,0 CRT ;Zeichenausgabe PUSH HL PUSH DE PUSH BC LD BC,POPX3 PUSH BC LD B,A LD A,(WS) AND A JP NZ,CRT3 LD A,B CP 82H ;Cursor ein? JR Z,CUP82 CP 83H ;Cursor aus? JR Z,CUP83 CP 1BH ;ESC? JR Z,CRT4 LD A,(WS+8) AND A ;1920-Format? LD A,B JP Z,CRT80 CP 14H JR Z,CLCE CP 16H JR Z,CLLE CP 15H JR NZ,CRT1 LD A,9 CRT1 CP 7FH JR NZ,CRT2 LD A,1FH CRT2 CALL PV1 DB 0 RET ; CUP83 LD A,2 JR CUP831 ; CUP82 XOR A CUP831 LD (WS+7),A RET ; CLLE LD A,(0B7A0H) PUSH AF LD B,A LD A,(0B79EH) INC A SUB B LD B,A LD A,11H ;Page Mode CALL PV1 DB 0 CLLE1 LD A,20H CALL CRT2 DJNZ CLLE1 LD A,12H ;Scroll Mode CALL PV1 DB 0 POP AF JP CLLE2 CLCE CALL CLLE LD A,(0B7A1H) INC A PUSH AF LD B,A LD A,(0B79FH) INC A SUB B RET Z LD B,A POP AF PUSH AF CLCE1 LD (0B7A1H),A LD A,2 ;CLLN CALL CRT2 LD A,(0B7A1H) INC A DJNZ CLCE1 POP AF DEC A LD B,A JP CBL POPX3 ;Gemeinsames POP-Ende XOR A POPS3 POP BC POP DE POP HL RET CRT4 LD A,80H ;ESC merken LD (WS),A ;(Bit 7) RET CRT3 ;wenn ESC aktiv ist (A=(WS)) BIT 7,A ;ESC frisch? JR NZ,CRT6 BIT 6,A JR NZ,CRT7 ;Locate aktiv? LD HL,(WS+3) LD M,B INC HL LD (WS+3),HL LD A,(WS) DEC A LD (WS),A RET NZ LD HL,(WS+1) CRT5 PUSH HL ;Adr. kellern LD HL,WS+11 LD (WS+3),HL LD A,M RET ;ESC-Routine anspringen ;dabei HL: Parameterliste und ;A: erster Parameter mitgeben CRT6 LD A,B CP 7FH ;>7F, Locate? JR C,CRT8 ;kein Locate LD A,40H LD (WS),A ;Locate merken LD A,B AND 1FH ;Zeile setzen LD (0B7A1H),A RET ; CRT7 XOR A LD (WS),A ;ESC beenden LD A,B AND 7FH ;Spalte setzen CLLE2 LD (0B7A0H),A RET ; CRT8 SUB 41H ;Falscher JR C,CRT9 ;Buchstabe? LD C,A LD B,0 LD HL,ESCTAB ADD HL,BC ADD HL,BC ADD HL,BC ;*3 LD A,M ;Parameterzahl INC HL LD B,M INC HL LD H,M LD L,B ;HL:Sprungadr. AND A LD (WS),A JR Z,CRT5 ;sofort Sprung LD (WS+1),HL ;merken ESCI RET ;nichts tun ; CRT9 XOR A ;ESC vergessen ESCT1 LD (WS),A RET ; ESCA LD E,30H ;PSET DB 1 ;LD BC, ESCB LD E,2FH ;PRESET LD B,3 PUSH DE LD DE,0B7D3H ;HOR+VERT LD BC,3 ;f}ttern LDIR POP DE CRT10 JP PV3 ; ESCC AND 1FH ;Grafikfarbe RLCA RLCA RLCA LD (0B7D6H),A;FARB RET ; ESCD LD DE,0B782H ;Linie LD BC,3 ;ARG1..2 LDIR ;f}ttern XOR A LD (DE),A INC DE LD C,3 ;ARG3..4 LDIR ;f}ttern LD (DE),A LD E,3EH ;CIRCLE JR CRT10 ; ESCE LD DE,0B782H ;Kreis LD BC,3 ;ARG1..2 LDIR ;f}ttern XOR A LD (DE),A INC DE LDI ;Radius LD (DE),A LD E,3FH ;CIRCL JR CRT10 ; ESCF CP 10H ;Fenster-Nr. RET NC ;Fehler LD E,3DH ;WINAK JR CRT10 ; ESCG LD DE,0B782H ;Tonausgabe LD BC,6 ;3 Argumente LDIR ;f}ttern LD E,35H ;TON JR CRT10 ; ESCH AND 1FH ;V/H-Farbe RLCA RLCA RLCA ;VFarbe*8 INC HL LD B,A LD A,M ;HFarbe AND 7 OR B LD (0B7A3H),A RET ; ESCL INC HL ;Fensterinit. LD C,M ;Nr. in A INC HL LD B,M INC HL LD E,M INC HL LD D,M LD L,C LD H,B CALL PV1 DB 3CH ;WININ RET QCLS ;Quick-ClearScreen LD A,(0B7A3H);A=Farbe LD D,0 ;?? ESCM ;CLS LD HL,8000H LD DE,8001H LD BC,27FFH LD M,L ;Null LDIR RET ; ESCN AND 1FH ;Neue VFarbe RLCA ;des Schirms(!) RLCA RLCA LD D,7 ESCO1 LD E,A LD A,(0B7A3H) AND D OR E LD (0B7A3H),A LD A,(WS+10) ;KC/4? LD HL,0A800H LD BC,0A00H AND A JR Z,ESCN1 LD A,(IX+1) SET 1,A OUT 84H,A LD HL,8000H ;KC/4-Extra LD BC,2800H ESCN1 LD A,M AND D OR E LD M,A INC HL DEC BC LD A,C OR B JR NZ,ESCN1 LD A,(IX+1) OUT 84H,A RET ; ESCO AND 7 ;Neue HFarbe LD D,0F8H ;des Schirms(!) JR ESCO1 ; ESCP ;Bildschirmmodus wechseln LD A,(WS+7);Cursor? AND A XOR A LD (WS+7),A;ein! CALL NZ,CUCP LD A,(WS+8);Modus XOR 1 LD (WS+8),A CALL PAGEPG LD L,1 BSSWAP LD BC,0B6F3H ;=FFB6 IN A,(C) ;>BSSTAT< XOR L ;Bit 0 swappen OUT (C),A RET ; ESCQ ;1 Byte lesen (nach FE00h) INC HL LD H,M LD L,A LD BC,1F2H OUTI ;zum Sektorpuffer MEMQ XOR A LD BC,0AEF3H ;=FFAE OUT (C),A ;>MEMANF< RET ; ESCR ;256 Bytes lesen (nach FE00h.. INC HL ;FEFFh) LD H,M LD L,A LD E,0 ;256mal LD BC,1F2H ESCR1 OUTI INC B INC B DEC E JR NZ,ESCR1 JR MEMQ ; ESCS ;1 Byte schreiben (vom Stream) LD E,M INC HL LD D,M INC HL LDI RET ; ESCT ;N Bytes schreiben (vom Stream) ;N: 1..65536, Parameterzahl: 5 ;(Mindestzahl) LD HL,(WS+11) LD A,(WS+15) LD M,A ;einpoken INC HL LD (WS+11),HL LD HL,(WS+13) DEC HL ;z{hlen LD (WS+13),HL LD A,L OR H ;Null? (Ende?) RET Z LD HL,WS+15;Parameter^ LD (WS+3),HL ;vorgaukeln LD A,1 ;Noch ein Par. JP ESCT1 ;vorgaukeln ;(Weiterlaufende ESC-Sequenz ;emulieren!) ESCU ;Programmaufruf INC HL LD H,M LD L,A JP (HL) ; ESCV LD E,24H ;Zeichenausgabe ESCW1 JP PV3 ; ESCW LD E,2 ;USER#2 JR ESCW1 ; ESCX LD E,3 ;USER#3 JR ESCW1 ; RET ;?? ; ESCAE ;CAOS-Ruf mit Nummer LD E,A JR ESCW1 ; ESCOE JP RESET ;Reset ; CUP8C ;Wechsel amerik./deutsch LD HL,CCTL1X LD DE,CCTL2X LD B,18H ;[\] CALL SWAP LD HL,CCTL3X LD B,20H ;{|}~ CALL SWAP LD L,2 BSSW01 JP BSSWAP ;kennzeichnen ; SWAP LD A,(DE) ;(HL):=:(DE) LDI ;INC DE DEC HL ;INC HL INC BC ;B mal LD M,A INC HL DJNZ SWAP RET ; CUP85 ;Page/Scrollmode LD A,(WS+9) XOR 1 LD (WS+9),A LD L,8 CALL BSSWAP LD A,11H ;Page Mode JR Z,CUP852 LD HL,PAGEPG CUP851 LD (WS+5),HL ;WEND setzen JR ESCV ; CUP852 LD HL,SCRLPG INC A ;A=12H, Scroll JR CUP851 ; CUP8B ;Keyboard klein/gro~ DI LD HL,KTAB ;durch Herum- LD B,0C0H ;poken in KTAB! KTM1 LD A,M CP 'A' JR C,KTM3 CP '[' JR NC,KTM2 SET 5,M ;Gro~->Klein JR KTM3 ; KTM2 CP 'a' JR C,KTM3 CP '{' JR NC,KTM3 RES 5,M ;Klein->Gro~ KTM3 INC HL DJNZ KTM1 EI LD L,4 JR BSSW01 ;kennzeichnen ; ESCZ3 ;Wechsel IRM-Ebene AND 7 LD B,A LD A,0F8H ESCAK1 AND (IX+1) OR B LD (IX+1),A OUT 84H,A RET ; ESCAK ;hochaufl|sende Grafik LD B,8 ESCBK1 LD A,0F7H JR ESCAK1 ; ESCBK ;normale Grafik LD B,0 JR ESCBK1 ; ESCCK ;Modul schalten INC HL LD D,M LD E,D LD L,A LD A,2 CALL PV1 DB 26H ;MODU RET ; ESCEK ;F-Taste belegen CALL PV1 DB 39H RET ; ESCDK ;Punkttesten INC HL LD H,M LD L,A LD (0B7D3H),A CALL PV1 DB 2FH ;PUDE JR Z,ESCDK1 LD (0B7D6H),A CALL PV1 DB 30H ;PUDE LD A,1 ;wenn gesetzt DEFB 0EH ;LD C, ESCDK1 XOR A ;wenn gel|scht LD BC,0AEF3H ;=FFAEh OUT (C),A ;>MEMANF< RET ; ROLL ;eigentliche Scrollroutine ;(1. Overlay f}r KC85/4) ;Diese Routine rollt nur die Text- ;Pixelzeilen, NICHT die Zwischenzeilen! ; LD (IX+7),23*8 ;Zeilen LD IY,3E80H;rechte H{lfte PUSH IY LD IY,3D00H;linke H{lfte ROLL1 LD E,(IY) LD D,(IY+1) LD L,(IY+10H) LD H,(IY+11H) LD BC,20H LDIR ;Roll links INC IY INC IY EX (SP),IY LD E,(IY) LD D,(IY+1) LD L,(IY+10H) LD H,(IY+11H) LD C,8 LDIR ;Roll rechts INC IY INC IY EX (SP),IY DEC (IX+7) ;mitz{hlen JR NZ,ROLL1 POP IY ;Stack Clear ;Letzte Zeile l|schen LD HL,3E70H LD C,8 ROLL2 LD E,M INC HL LD D,M INC HL LD B,20H XOR A ROLL3 LD (DE),A ;Linke H{lfte INC DE DJNZ ROLL3 DEC C JR NZ,ROLL2 LD HL,3FF0H LD C,8 ROLL4 LD E,M INC HL LD D,M INC HL LD B,8 XOR A ROLL5 LD (DE),A ;Rechte H{lfte INC DE DJNZ ROLL5 DEC C JR NZ,ROLL4 RET ; CUCP ;Cursor kompeln PUSH HL PUSH DE PUSH BC LD HL,(0B7A0H) PUSH AF LD A,(WS+8) AND A ;1920-Format? JR Z,CUCP2 ;ja CALL PV1 DB 25H ;CUCP (CAOS) CUCP1 POP AF JP POPX3 ;Ende CUCP2 ;1920-Modus ;(2. Overlay f}r KC85/4) SRL L ;LSB Spalte->CY LD C,0F0H JR NC,CUCP3 LD C,0FH ;CY=1: rechts CUCP3 LD A,L CP 20H LD IY,3D00H;Tabelle li JR C,CUCP4 LD IY,3E80H;Tabelle re LD A,L SUB 20H LD L,A CUCP4 LD E,L LD D,0 LD L,H ;L=Zeile LD H,D ;H=0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ;*16 EX DE,HL ADD IY,DE ;Tab-Adr. EX DE,HL LD B,8 LD H,0 CUCP5 LD L,(IY) INC IY LD H,(IY) ;HL=Pix-Adr. INC IY ADD HL,DE ;Spalte add. LD A,M XOR C ;Nibble LD M,A DJNZ CUCP5 ;8mal JR CUCP1 ;Ende ;1920-Zeichen-Routine CRT801 LD E,M INC HL LD D,M EX DE,HL LD BC,(0B7A0H) JP (HL) CRT80 ;Haupteinsprung LD HL,CTAB LD B,12 CRT802 CP M ;Steuerfunktion INC HL ;suchen JR Z,CRT801 INC HL INC HL DJNZ CRT802 ;12 Funktionen CRT80X AND 7FH ;Bit 7 tilgen SUB 20H ;nicht RET C ;darstellbar LD H,0 LD L,A ADD HL,HL ADD HL,HL ADD HL,HL ;*8, CCTL-Adr. LD DE,CCTL80 ADD HL,DE EX DE,HL LD BC,(0B7A0H) CRT803 ;(3. Overlay f}r KC85/4) LD HL,3D00H;Links LD A,C CP 40H JR C,CRT804 SUB 40H LD HL,3E80H;Rechts CRT804 PUSH HL LD L,B LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ;*16 POP BC ADD HL,BC RRA LD C,A LD B,8 CRT805 PUSH HL LD A,(DE) PUSH AF LD A,M INC HL LD H,M OR C LD L,A POP AF PUSH AF LD A,M JR C,CRT806 AND 0FH LD M,A POP AF PUSH AF AND 0F0H JR CRT807 ; CRT806 AND 0F0H LD M,A POP AF PUSH AF AND 0FH CRT807 OR M LD M,A INC DE POP AF POP HL INC HL INC HL DJNZ CRT805 CUR LD BC,(0B7A0H) INC C LD A,C CP 80 ;Spalten JR NZ,CRT809 LD C,0 CUD INC B LD A,24 ;Zeilen CP B JR Z,CRT80J CRT809 LD (0B7A0H),BC KEINPG ;Keine WEND-Reaktion RET ; CRT80J LD HL,(WS+5) ;WEND - JP (HL) ;Reaktionsprog. ; SCRLPG ;Scroll-Reaktion CALL ROLL LD BC,23*100H;Cursorzeile JR CRT809 ; PAGEPG ;Page-Reaktion CALL QCLS HOME LD BC,0 ;HOME-Position JR CRT809 ; CLR ;Backstep, 7Fh CALL CUL LD A,' ' CALL CRT80X CUL LD BC,(0B7A0H) DEC C LD A,0FFH CP C JR NZ,CRT809 LD C,4FH CUU LD A,0FFH DEC B CP B JR NZ,CRT809 INC B CRT808 JR CRT809 ; CBL LD C,0 JR CRT809 ; CLC ;Cursor rechts bis Ende l|schen LD BC,(0B7A0H) PUSH BC LD HL,(WS+5) ;WEND-Adr. PUSH HL ;retten LD HL,KEINPG LD (WS+5),HL LD A,80 ;Spalte SUB C LD H,0 LD L,A LD DE,80 LD A,23 ;Zeile SUB B JR Z,CLC2 CLC1 ADD HL,DE DEC A JR NZ,CLC1 CLC2 LD C,L LD B,H CLC3 LD A,20H PUSH BC CALL CRT80X POP BC DEC BC LD A,C ;Null? OR B JR NZ,CLC3 JR CLL2 ; CLL PUSH BC LD HL,(WS+5) PUSH HL ;retten LD HL,KEINPG LD (WS+5),HL LD A,80 SUB C LD B,A CLL1 LD A,20H PUSH BC CALL CRT80X POP BC DJNZ CLL1 CLL2 POP HL LD (WS+5),HL ;r}cktragen POP BC JR CRT808 ;BC eintragen ; CLLN XOR A LD (0B7A0H),A LD C,A JR CLL ; ;Zeichenbildtabelle ;Aufbau: High-Nibble=Low-Nibble ;(Speicherverschwendung) ;Pro Zeichen 8 Bytes CCTL80 DB 0,0,0,0,0,0,0,0 ;SPC DB 22H,22H,22H,22H,22H,0,22H,0 ;! DB 33H,33H,0,0,0,0,0,0 ;" DB 0,55H,77H,55H,77H,55H,0,0 ;# DB 22H,77H,66H,22H,33H,77H,22H,0 ;$ DB 0,55H,11H,22H,22H,44H,55H,0 ;% DB 0,22H,55H,22H,55H,44H,33H,0 ;& DB 22H,22H,0,0,0,0,0,0 ;' DB 33H,44H,44H,44H,44H,44H,33H,0 ;( DB 66H,11H,11H,11H,11H,11H,66H,0 ;) DB 0,0,55H,22H,55H,0,0,0 ;* DB 0,0,22H,77H,22H,0,0,0 ;+ DB 0,0,0,0,0,22H,22H,44H ;, DB 0,0,0,77H,0,0,0,0 ;- DB 0,0,0,0,0,0,22H,0 ;. DB 11H,11H,22H,22H,22H,44H,44H,0 ;/ DB 22H,55H,55H,55H,55H,55H,22H,0 ;0 DB 11H,33H,55H,11H,11H,11H,11H,0 ;1 DB 22H,55H,55H,11H,22H,44H,77H,0 ;2 DB 22H,55H,11H,22H,11H,55H,22H,0 ;3 DB 55H,55H,55H,77H,11H,11H,11H,0 ;4 DB 77H,44H,44H,77H,11H,55H,22H,0 ;5 DB 22H,44H,44H,66H,55H,55H,22H,0 ;6 DB 77H,11H,11H,11H,22H,22H,22H,0 ;7 DB 22H,55H,55H,22H,55H,55H,22H,0 ;8 DB 22H,55H,55H,33H,11H,11H,22H,0 ;9 DB 0,0,22H,0,0,22H,0,0 ;: DB 0,0,22H,0,0,22H,22H,44H ;; DB 0,11H,22H,44H,22H,11H,0,0 ;< DB 0,0,77H,0,77H,0,0,0 ;= DB 0,44H,22H,11H,22H,44H,0,0 ;> DB 22H,55H,11H,22H,22H,0,22H,0 ;? DB 66H,55H,11H,22H,55H,55H,33H,0 ;40H DB 22H,55H,55H,77H,55H,55H,55H,0 ;A DB 66H,55H,55H,66H,55H,55H,66H,0 ;B DB 22H,55H,44H,44H,44H,55H,22H,0 ;C DB 66H,55H,55H,55H,55H,55H,66H,0 ;D DB 77H,44H,44H,66H,44H,44H,77H,0 ;E DB 77H,44H,44H,66H,44H,44H,44H,0 ;F DB 22H,55H,44H,44H,55H,55H,33H,0 ;G DB 55H,55H,55H,77H,55H,55H,55H,0 ;H DB 77H,22H,22H,22H,22H,22H,77H,0 ;I DB 77H,11H,11H,11H,11H,55H,22H,0 ;J DB 55H,55H,66H,44H,66H,55H,55H,0 ;K DB 44H,44H,44H,44H,44H,44H,77H,0 ;L DB 55H,77H,77H,55H,55H,55H,55H,0 ;M DB 66H,55H,55H,55H,55H,55H,55H,0 ;N DB 77H,55H,55H,55H,55H,55H,77H,0 ;O DB 66H,55H,55H,66H,44H,44H,44H,0 ;P DB 77H,55H,55H,55H,55H,77H,77H,11H ;Q DB 66H,55H,55H,66H,55H,55H,55H,0 ;R DB 22H,55H,44H,22H,11H,55H,22H,0 ;S DB 77H,22H,22H,22H,22H,22H,22H,0 ;T DB 55H,55H,55H,55H,55H,55H,77H,0 ;U DB 55H,55H,55H,55H,55H,55H,22H,0 ;V DB 55H,55H,55H,55H,77H,77H,55H,0 ;W DB 55H,55H,55H,22H,55H,55H,55H,0 ;X DB 55H,55H,55H,77H,22H,22H,22H,0 ;Y DB 77H,11H,11H,22H,44H,44H,77H,0 ;Z CCTL1X ;Eckige Klammern (amerik.) DB 77H,44H,44H,44H,44H,44H,77H,0 ;(. DB 44H,44H,22H,22H,22H,11H,11H,0 ;/. DB 77H,11H,11H,11H,11H,11H,77H,0 ;.) DB 0,22H,55H,0,0,0,0,0 ;^ DB 0,0,0,0,0,0,0,77H ;_ DB 66H,11H,22H,55H,22H,44H,33H,0 ;Para DB 0,0,22H,55H,55H,55H,33H,0 ;a DB 44H,44H,66H,55H,55H,55H,66H,0 ;b DB 0,0,33H,44H,44H,44H,33H,0 ;c DB 11H,11H,33H,55H,55H,55H,33H,0 ;d DB 0,0,22H,55H,77H,44H,77H,0 ;e DB 22H,55H,44H,66H,44H,44H,44H,44H ;f DB 0,0,33H,55H,55H,33H,11H,66H ;g DB 44H,44H,66H,55H,55H,55H,55H,0 ;h DB 0,22H,0,22H,22H,22H,22H,0 ;i DB 0,22H,0,22H,22H,22H,22H,66H ;j DB 44H,44H,55H,55H,66H,55H,55H,0 ;k DB 44H,44H,44H,44H,44H,55H,22H,0 ;l DB 0,0,55H,77H,55H,55H,55H,0 ;m DB 0,0,22H,55H,55H,55H,55H,0 ;n DB 0,0,22H,55H,55H,55H,22H,0 ;o DB 0,0,22H,55H,55H,66H,44H,44H ;p DB 0,0,22H,55H,55H,33H,11H,11H ;q DB 0,0,66H,55H,44H,44H,44H,0 ;r DB 0,0,21H,44H,22H,11H,66H,0 ;s ;^ s mit Fehler!!! DB 22H,22H,77H,22H,22H,22H,11H,0 ;t DB 0,0,55H,55H,55H,55H,77H,0 ;u DB 0,0,55H,55H,55H,55H,22H,0 ;v DB 0,0,55H,55H,77H,77H,55H,0 ;w DB 0,0,55H,55H,22H,55H,55H,0 ;x DB 0,0,55H,55H,55H,33H,11H,77H ;y DB 0,0,77H,11H,22H,44H,77H,0 ;z CCTL3X ;Geschweifte Klammern (amerik.) DB 33H,22H,22H,44H,22H,22H,33H,0 ;(* DB 22H,22H,22H,22H,22H,22H,22H,0 ;/* DB 66H,22H,22H,11H,22H,22H,66H,0 ;*) DB 77H,0,0,0,0,0,0,0 ;^* DB 77H,77H,77H,77H,77H,77H,77H,77H ;CU CCTL2X ;Umlaute (deutsch) DB 55H,22H,55H,55H,77H,55H,55H,0 ;[ DB 55H,0,77H,55H,55H,55H,77H,0 ;\ DB 55H,0,55H,55H,55H,55H,77H,0 ;] DB 0,55H,0,22H,55H,55H,33H,0 ;{ DB 0,55H,0,22H,55H,55H,22H,0 ;| DB 0,55H,0,55H,55H,55H,77H,0 ;} DB 22H,55H,55H,66H,55H,55H,66H,44H ;~ ;Ende der Zeichenbildtabelle ;Beginn CTAB ;Aufbau: 1 Byte ASCII-Code ; 1 Word Adresse ;12 Tripletts lang CTAB DB 1 DW HOME DB 7 DW CRT2 ;BEEP DB 8 DW CUL DB 0AH DW CUD DB 0CH DW PAGEPG ;CLS DB 0DH DW CBL DB 14H DW CLC DB 15H DW CUR DB 16H DW CLL DB 18H DW CLLN DB 1AH DW CUU DB 7FH DW CLR ;Workspace ;L{nge 18 Bytes WS DB 0 ;ESC-Flag/ParamZ{hler DW ESCI ;ESC-Progr.-Zeiger DW WS+11;ESC-ParamZeiger DW SCRLPG ;WEND-Reaktion DB 0 ;Cursor ein=0/aus<>0 DB 0 ;1920 ein=0/aus<>0 DB 0 ;Scroll ein=0/aus<>0 DB 0 ;KC85/3 ja=0/nein<>0 DS 8,0 ;ESC-Parameterliste ;ESC-Funktionstabelle ;Aufbau: 1 Byte Anzahl Parameter ; 1 Word Adresse ;L{nge 37 Tripletts ESCTAB DB 3 DW ESCA DB 3 DW ESCB DB 1 DW ESCC DB 6 DW ESCD DB 4 DW ESCE DB 1 DW ESCF DB 6 DW ESCG DB 2 DW ESCH DB 0 DW ESCI DB 0 DW ESCI ;ESCJ DB 0 DW ESCI ;ESCK DB 5 DW ESCL DB 0 DW ESCM DB 1 DW ESCN DB 1 DW ESCO DB 0 DW ESCP DB 2 DW ESCQ DB 2 DW ESCR DB 3 DW ESCS DB 5 DW ESCT DB 2 DW ESCU DB 1 DW ESCV DB 1 DW ESCW DB 1 DW ESCX DB 0 DW ESCI ;ESCY DB 0 DW ESCI ;ESCZ DB 1 DW ESCAE ;ESC[ DB 0 DW ESCOE ;ESC\ DB 0 DW CUP8C ;ESC] DB 0 DW CUP85 ;ESC^ DB 0 DW CUP8B ;ESC_ DB 1 DW ESCZ3 ;ESC` DB 0 DW ESCAK ;ESCa DB 0 DW ESCBK ;ESCb DB 2 DW ESCCK ;ESCc DB 2 DW ESCDK ;ESCd DB 1 DW ESCEK ;ESCe ORG RZAS+$-ZAS ;*************** ;KC85/4-Overlays ;*************** RKC4OVL ORG ROLL ;Scrollroutine LD DE,8008H LD HL,8012H LD A,28H ROLL6 LD BC,0EEH LDIR LD BC,12H ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL DEC A JR NZ,ROLL6 LD H,80H LD C,28H ROLL7 LD B,8 LD L,0F8H ROLL8 LD M,0 INC HL DJNZ ROLL8 DEC C JR NZ,ROLL7 RET ORG RKC4OVL+$-ROLL RKC4OV2 ORG CUCP2 ;Cursor komplementieren CALL CUCP7 CUCP6 LD A,M XOR C LD M,A INC HL DJNZ CUCP6 JP CUCP1 ORG RKC4OV2+$-CUCP2 RKC4OV3 ORG CRT803 ;80-Zeichen-Ausgabe PUSH BC POP HL CALL CUCP7 CRT84 PUSH BC LD A,(DE) AND C LD B,A LD A,C CPL AND M OR B LD M,A POP BC INC HL INC DE DJNZ CRT84 JP CUR CUCP7 SRL L LD C,0F0H JR NC,CUCP8 LD C,0FH CUCP8 LD A,80H ADD L LD B,H LD H,A LD A,B ADD A ADD A ADD A ADD B ADD B ADD 8 LD L,A LD B,8 RET ORG RKC4OV3+$-CRT803 RKC4OVE ;Ende Overlays DS 0F000H-$,0 ;********************* ;*** Adresse F000h *** ;********************* DS 12H,0 ;frei JP DOSIN CAOSMD ;Start CAOS-Betriebsart LD HL,RFLPG LD DE,FLPG LD BC,RFILEIN-RFLPG LDIR ;bis NMI-Vektor LD HL,RFILEIN LD E,FILEIN;nach NMI-Vekt. LD BC,ENDCM0-FILEIN ;mit INITIAL.UUU LD A,(0B781H) CP 2 JR C,FLCPY ;ohne.. LD BC,ENDCM1-FILEIN FLCPY LDIR JP BACK JPARG CP 0FFH JR Z,SELFT LD HL,RSIOT LD DE,SIOT LD BC,100H LDIR LD (SIOT+1),A JP SIOINI SELFT LD HL,RSWIT LD BC,RBOOT-RSWIT LD DE,SWIT LDIR JP SWIT ;************************* ;** Folgender Programm- ** ;** bereich Abarbeitung ** ;** mit Modul als ROMC! ** ;************************* RSTEST ORG $-2000H STEST EI CALL PV1 DB 23H DB 'Version 2.0 (02/01/89)' DB 13,10,0 LD BC,0F4H LD A,2 ;RESET OUT (C),A ;an D004 LD A,0 OUT (C),A LD C,0F0H KRCLR LD B,0 XOR A ;Koppelram KRSCLR OUT (C),A ;l|schen DJNZ KRSCLR INC C LD A,0F4H CP C JR NZ,KRCLR LD C,0F0H KRTEST LD B,0 TBYTE LD A,1 TBIT OUT (C),A IN E,(C) CP E JR NZ,KRERR1 CPL OUT (C),A IN E,(C) CP E JR NZ,KRERR1 CPL RLCA CP 1 JR NZ,TBIT PUSH BC KRT1 INC B JR Z,KRT2 INC C KRT2 LD A,0F4H CP C JR Z,KRT3 IN A,(C) AND A JR NZ,KRERR2 JR KRT1 ; KRT3 POP BC XOR A OUT (C),A ;0 eintragen INC B JR NZ,TBYTE INC C LD A,C CP 0F4H JR NZ,KRTEST CALL PV1 DB 23H,'RAM O.K.',13,10,0 JP ROMTST ; KRERR1 CALL PV1 ;Sollwert DB 1CH ;AHEX CALL PV1 DB 2BH ;SPAC LD A,E CALL PV1 ;Istwert DB 1CH ;AHEX CALL PV1 DB 2BH ;SPAC PUSH BC POP HL CALL PV1 ;Adresse DB 1AH ;HLHX CALL PV1 DB 2CH ;CRLF RET ; KRERR2 PUSH BC POP DE ;=beinflu~te POP HL ;=gesetzte CALL PV1 ;Adresse DB 1BH ;HLDE CALL PV1 DB 2CH ;CRLF ROMTST ;ROM-Test LD HL,0C000H LD BC,2000H-2;L{nge-2 LD DE,0FFFFH ;Startwert ROMT1 LD A,M XOR D LD D,A RRCA ;geheimnis- RRCA ;volle CRC- RRCA ;Berechnung RRCA ;Entflechtung AND 0FH ;sinnlos XOR D LD D,A RRCA RRCA RRCA PUSH AF AND 1FH XOR E LD E,A POP AF PUSH AF RRCA AND 0F0H XOR E LD E,A POP AF AND 0E0H XOR D LD D,E LD E,A INC HL DEC BC LD A,B OR C JR NZ,ROMT1 LD HL,(0DFFEH) LD A,L ;Vergleich CP E ;mit Sollwert JR NZ,ROMERR LD A,H CP D JR NZ,ROMERR CALL PV1 DB 23H,'ROM O.K.',13,10,0 JR KRPRGT ; ROMERR CALL PV1 DB 23H,'ROM-FEHLER',13,10,7,0 KRPRGT ;Koppelram-Programmtest LD HL,RKRP LD E,RSWIT-RKRP ;L{nge LD BC,1F0H ;=FC00,KRP KRPT1 OUTI ;in Koppelram INC B ;}bertragen INC B DEC E JR NZ,KRPT1 LD A,1 OUT 0F4H,A ;und starten LD BC,0F0H LD DE,0 KRWAIT IN A,(C) CP 0FEH JR Z,KROMOK;OK. DEC DE LD A,E OR D JR NZ,KRWAIT CALL PV1 DB 23H,'FEHLER IM KOPPEL-RAM ' DB 'PROGRAMM',7,13,10,0 JR KRTOT ; KROMOK CALL PV1 DB 23H,'KOPPEL-RAM PROGRAMM ' DB 'O.K.',13,10,0 LD DE,0 LD BC,1F0H ;=FC01,KRP+1 DRWAIT IN A,(C) CP 99H JR Z,DRAMOK DEC DE LD A,D OR E JR NZ,DRWAIT CALL PV1 DB 23H,'DRAM PROGRAMM FEHLER' DB 13,10,7,0 JR KRTOT ; DRAMOK CALL PV1 DB 23H,'dRAM PROGRAMM O.K.' DB 13,10,0 KRTOT LD BC,0F4H LD A,2 ;Reset D004 OUT (C),A LD A,0 OUT (C),A JP SWITB ; RKRP ORG 0FC00H ;bzgl. D004! KRP ;Koppelram-Programm DB 0,0 ;zun{chst 2*NOP KRP1 LD HL,KRP LD A,M INC A LD M,A CP 0FEH ;Kennbyte JR NZ,KRP1 ;dRAM-Testprogramm }bertragen LD HL,RDRP LD DE,DRP LD BC,RDRPE-RDRP+2 ;2 mehr LDIR JP DRP1 RDRP ORG 0 ;bzgl. D004! DRP ;dRAM-Programm DB 0 DRP1 LD HL,DRP DRP2 INC M ;bis 99h LD A,M ;durchz{hlen LD (KRP+1),A CP 99H ;Kennbyte JR NZ,DRP2 HALT ;Ende ORG RDRP+$-DRP RDRPE ;Koppelram-Adresse ORG RKRP+$-KRP ;ROMC-Adresse ORG RSTEST+$-STEST RSWIT ;ROME-Adresse ORG 0 ;bzgl. D001! SWIT ;schaltet D004-ROM auf C000h LD BC,0FC80H LD A,7 OUT (C),A IN A,88H SET 0,A ;CAOS ein OUT 88H JP STEST ;zum Selbsttest SWITB ;zur R}ckkehr IN A,88H SET 7,A ;BASIC ein OUT 88H ;(Fehler: auch RET ;am KC85/4!) ;(RET i.a. zu LOOP) ORG RSWIT+$-SWIT RBOOT ;ROME-Adresse ORG 0FC00H ;bzgl. D004! BOOT ;Urlade-Programm ;>>> HILFE, SPAGHETTI-TEUFEL!!! <<< LD SP,8000H ;mitten im RAM CALL FDINI LD B,12 ;Leseversuche NBOOT ;weiterer Versuch PUSH BC CALL FDRES ;Spur 0 usw. JR NZ,NTRDY ;Klappe offen.. ;oder Kopf in innerer Spur (!) LD HL,9000H ;Ziel LD BC,200H ;200H Bytes CALL FDRD ;lesen, Z=0:OK POP BC ;bei Fehlversuch JR NZ,NLOOP ;Format wechseln LD HL,(9000H) ;Kennung LD DE,'Y'*256+'S' ;'SY' AND A SBC HL,DE ;gleich? JR NZ,NOSYS ;kein System LD A,(9002H) ;3.Buchstabe CP 'S' LD A,5 ;CAOS-Diskette JR NZ,TUROK ;wenn 'SYx' LD A,1 ;PC, wenn 'SYS' TUROK LD (0FFB3H),A ;>UROK< JP 09004H ;Eigentlichen ;Bootvorgang starten! NOSYS ;No System eintragen LD A,4 FUROK ;>UROK< eintragen und Stop LD (0FFB3H),A ;>UROK< XOR A OUT 0F6H,A HALT ;Ende NTRDY ;Not Ready eintragen POP BC LD A,2 JR FUROK BOBY1 DW LISTE1 ;1. Sequenz BOBY2 DW LISTE2 ;2. Sequenz NLOOP ;Neuer Schleifendurchlauf, ;vorher Tausch von BOBY1 u. '2 LD HL,(BOBY1) LD DE,(BOBY2) LD (CMDT0+1),HL ;Modifizierung LD (BOBY1),DE ;des Codes LD (BOBY2),HL ;(grausam!) DJNZ NBOOT ;12 Versuche LD A,3 ;Can't Read JR FUROK ;eintragen ;** 0F0H: HSR-Hauptstatusregister ;** Bit 6: Datenrichtung: 1=zur CPU ;** Bit 7: Fertigmeldung: 1=fertig ;** 0F1h: Kommando- bzw. Resultatreg. FDINI ;FDC initialisieren LD B,0 FDIW DJNZ FDIW ;etwas warten IN A,0F0H CP 80H ;fertig? JR Z,FDI1 ;ja AND 0FH ;eine Floppy ;aktiv? (0..3) CALL NZ,FDI2 IN A,0F1H ;Resultat holen JR FDINI ;und ignorieren BOBY3 DB 9FH,14H FDI1 LD HL,BOBY3 LD BC,303H ;Bytes 03,9F,14 JR CMDPH ;Kommandophase FDRES ;Spur 0 anfahren LD A,21H ;Drive 0 aktiv OUT 0F6H,A LD BC,0 ;65536 Zyklen FDRES1 IN A,0F4H BIT 5,A JR NZ,FDRES2 ;LW bereit DEC BC LD A,B OR C JR NZ,FDRES1 INC A ;A=1,Z=0,Fehler RET ;(Neuer Versuch) FDRES2 ;Kopf zur Spur 0 befehlen LD BC,207H CALL CMDT0 ;Bytes 07,00 ;(00 f}r Laufwerk 0!) FDI2 IN A,0F0H ;HSR AND 1FH ;Keine Floppy aktiv ;und kein Kommando? RET Z ;ja, Z=1:OK FDRES3 IN A,0F4H BIT 6,A JR NZ,FDRES3 LD BC,108H ;Byte 08: Pr}fe ;Interruptstatus CALL CMDPH ;Kommando CALL RESULT ;1. Resultat LD B,A ;merken ADD A ;A=x0000000? RET Z ;ja, OK CALL RESULT ;2. Resultat LD A,B ;ignorieren AND 0F0H ;A=1100xxxx? CP 0C0H JR Z,FDRES3 ;ja,wiederholen XOR 20H RET ;A=0010xxxx-> Z=1: OK CMDT0 ;Kommando nach Tabelle ;abarbeiten, 1. Byte und ;Anzahl in BC LD HL,LISTE1 ;auch LISTE2, ; ;s.o.!! CMDPH ;Kommandophase ;PE: B: Anzahl der Bytes ; C: 1. Byte ; HL: Adresse weiterer Bytes IN A,0F0H ;HSR AND 0C0H ;=10xxxxxx? CP 80H JR NZ,CMDPH ;nicht fertig LD A,C OUT 0F1H,A ;Kommandobyte LD C,M ;n{chstes -"- INC HL ;Tabellenzeiger DJNZ CMDPH ;B-mal RET RESULT ;1 Resultat abholen ;(bei Resultatphase) ;PA: A: Resultat IN A,0F0H ;HSR AND 0C0H ;=11xxxxxx? CP 0C0H JR NZ,RESULT ;nicht bereit IN A,0F1H ;das Resultat RET FDRD ;Sektorlesen PUSH BC ;BC war 200H PUSH HL LD BC,946H ;9 Bytes ;46H bedeutet: Lesen MFM CALL CMDT0 ;Sektor(en)lesen POP HL POP DE ;was BC war LD B,E ;war 0 LD C,0F2H ;DMA-Adresse CALL RDSECT ;Lesen 512 Bytes LD B,7 ;7 Resultate LD HL,LISTE4 ;Resultatliste FDRD1 CALL RESULT LD M,A ;Resultate INC HL ;einsammeln DJNZ FDRD1 LD A,(LISTE4) ;ST0 interessant AND 0C0H ;A=00xxxxxx? RET ;ja->Z=1 RDSECT ;Sektor (hier 512 Bytes) lesen IN A,0F4H ADD A ;wenn x0xxxxxx RET P ;zu fr}h fertig JR C,RDSECT ;wenn 11xxxxxx INI ;1 Byte JR NZ,RDSECT ;wenn B<>0 DEC D JR NZ,RDSECT ;2mal OUT 0F8H,A ;A=01xxxxxx RET LISTE2 ;Format 2 (PC1715-780K) DB 0 ;Laufwerk 0 DB 0 ;Spur 0 DB 0 ;Kopf 0 DB 1 ;Erster Cluster DB 1 ;Letzter Cluster DB 10H ;L{nge der L}cke DB 0EH ;Datenblockl{nge DB 0FFH ;?? ;Freier Bereich, k|nnte f}r LISTE3 ;reserviert worden sein DS 8,0 LISTE1 ;Format 1 (kleinere L}cken) DB 0,0,0,1,3,5,0EH,0FFH LISTE4 ;Resultatliste ORG RBOOT+$-BOOT RERRM ORG 0 ERRM ;Fehlermitteilungen LD B,A IN A,88H SET 0,A ;CAOS ein OUT 88H EI LD A,B CP 2 JR NZ,ERRM1 CALL PV1 DB 23H,'Not ready ',0 JR ERRME ; ERRM1 CP 3 JR NZ,ERRM2 CALL PV1 DB 23H,'Cannot read ',0 JR ERRME ; ERRM2 CP 4 JR NZ,ERRM3 CALL PV1 DB 23H,'No System ',0 JR ERRME ; ERRM3 CALL PV1 DB 1CH ERRME CALL PV1 DB 19H ;ERRM RET ORG RERRM+$-ERRM RV24I ORG 200H V24INI JR V24I1 PRINT JR PRINT1 V24IT DB 47H,2EH ;F}r CTC DB 18H,4,44H,3,20H,5,6AH;F}r SIO V24I1 LD BC,880H V24I2 IN A,(C) CP 0EEH ;M003/M053? JR Z,V24I3 ;Endlich!! INC B ;Alle Sch{chte JR NZ,V24I2;absuchen RET V24I3 ;V24-Modul gefunden LD L,B LD A,2 LD D,1 LD E,D ;V24-Modul CALL PV1 ;einschalten DB 26H ;MODU LD C,0CH LD B,2 LD HL,204H DI OTIR ;F}r CTC LD C,0AH LD B,7 OTIR ;F}r SIO RET ;Kein EI? ; PRINT1 PUSH AF PRINT2 IN A,0AH BIT 2,A ;Puffer frei? JR Z,PRINT2 POP AF OUT 8,A ;Ausgabe RET ORG RV24I+$-V24INI RV24D ORG 380H V24DUP JR V24D1 V24OT JR V24D2 V24IN JR V24D6 V24DT DB 47H,2EH ;CTC DB 18H,4,44H,3,0E1H,5,6AH ;SIO V24D1 LD C,0DH LD B,2 LD HL,V24DT OTIR ;CTC rechts LD C,0BH LD B,7 ;SIO rechts OTIR RET V24D2 ;Ausgabe PUSH AF V24D3 IN A,0BH BIT 2,A JR Z,V24D5 POP AF V24D4 OUT 9,A ;Ausgabe RET V24D5 LD A,(IX+13) CP 3 ;Break? JR NZ,V24D3 POP AF LD A,1AH ;^Z = EOF JR V24D4 ;liefern V24D6 ;Eingabe IN A,0BH BIT 0,A JR NZ,V24D8 LD A,5 OUT 0BH,A LD A,0EAH OUT 0BH,A V24D7 IN A,0BH BIT 0,A JR Z,V24D9 V24D8 IN A,9 JR V24D10 V24D9 LD A,(IX+13) AND 0EFH CP 3 ;Break/Stop? JR NZ,V24D7 LD A,1AH ;^Z = EOF V24D10 PUSH AF LD A,5 OUT 0BH,A LD A,6AH OUT 0BH,A POP AF RET ORG RV24D+$-V24DUP RSIOT ORG 0BC00H SIOT ;SIO-CTC-Tabelle DB 47H,0 ;0 zum Modifi- ;zieren ;CTC DB 18H,4,44H,3,0C1H,5,6AH;SIO SIOINI ;Init EI IN A,88H SET 0,A ;CAOS ein OUT 88H,A LD BC,880H SIOT1 IN A,(C) CP 0EEH ;M003/M053? JR Z,SIOT2 INC B JR NZ,SIOT1 CALL PV1 DB 19H ;Fehlermeldung RET ; SIOT2 LD A,2 LD L,B LD D,1 LD E,D CALL PV1 ;V24-Modul DB 26H ;einschalten IN A,9 ;SIO IN A,9 ;ausr{umen IN A,9 IN A,9 LD HL,SIOT LD BC,20DH OTIR LD BC,70BH OTIR LD HL,SIOTO LD (0B7C1H),HL ;USER-IN#2 LD HL,SIOTI LD (0B7C4H),HL ;USER-OUT#3 ;Irgendwie ham' die was verwechselt! ;>> ICH GLAUB', ICH SPINNE! << CALL SIOTI RET C ;CY=1: Abbruch LD L,A CALL SIOTI RET C LD H,A ;HL=AAdr CALL SIOTI RET C LD C,A CALL SIOTI RET C LD B,A ;BC=L{nge CALL SIOTI RET C LD E,A CALL SIOTI RET C LD D,A ;DE=SAdr PUSH DE SIOT3 CALL SIOTI RET C ;Ansprung (DE) ;Der Computer tut das, was man program- ;miert, NICHT das, was man will! ;(BRK - der sichere Absturz...) LD M,A INC HL DEC BC ;mitz{hlen LD A,B OR C JR NZ,SIOT3 RET ;Ansprung (DE) SIOTO ;Ausgabe PUSH AF SIOT4 IN A,0BH BIT 2,A JR NZ,SIOT6 POP AF SIOT5 OUT 9,A RET ; SIOT6 LD A,(IX+13) CP 3 ;BRK? JR NZ,SIOT4 POP AF LD A,1AH ;^Z = EOF JR SIOT5 SIOTI ;Eingabe IN A,0BH BIT 0,A JR NZ,SIOT8 SIOT7 IN A,0BH BIT 0,A JR Z,SIOT9 SIOT8 IN A,9 AND A RET ; SIOT9 LD A,(IX+13) CP 3 ;BRK? JR NZ,SIOT7 SCF ;CY=1: Abbruch RET ORG RSIOT+$-SIOT RFLPG ORG 0 FLPG ;FLOAD-Programm f}r D001 DS 12,0 ;f}r Dateiname FBLOAD ;BASIC->BLOAD< f}r Floppy CALL IRMON LD HL,FLPG CALL RC DW FLPRG-$-2 CALL IRMOFF RET DB 7FH,7FH,'FLOAD',1 ;f}r BASIC CALL PV1 DB 23H,'NAME :',0 CALL PV1 DB 17H ;INLIN LD HL,6 ADD HL,DE FLPRG EX (SP),HL LD (0B797H),HL EX (SP),HL LD E,12 ;Zeichen max. LD BC,82F3H POKNAM LD A,M OUT (C),A INC HL INC B DEC E JR NZ,POKNAM LD A,9 LD B,80H OUT (C),A WFRDY IN A,(C) RRCA JR C,WFRDY BIT 6,A JR NZ,RDERRN LD BC,90F2H IN A,(C) CP 2 JR C,RDERR CP 0AH JR NC,RDERR JR FILEIN ORG RFLPG+$-FLPG RFILEIN ORG 66H+3 ;NMI freilassen FILEIN INC B IN L,(C) INC B IN H,(C) INC B IN E,(C) INC B IN D,(C) CP 3 JR C,LDADR PUSH HL INC B IN L,(C) INC B IN H,(C) EX (SP),HL LDADR PUSH AF LD A,(0B781H) AND A JR Z,RDSEC LD BC,(0B782H) ADD HL,BC POP AF JR C,ENDADR EX (SP),HL ADD HL,BC EX (SP),HL ENDADR EX DE,HL ADD HL,BC EX DE,HL PUSH AF RDSEC POP AF RDSEC1 LD A,1 LD BC,80F3H OUT (C),A WTSEC IN A,(C) RRCA JR C,WTSEC BIT 6,A JR Z,DATAIN RDERRN INC B IN A,(C) CALL PV1 DB 1CH RDERR CALL PV1 DB 19H LD HL,(0B797H) JP (HL) ; DATAIN DEC C DATIN1 INI INC B INC B PUSH HL SBC HL,DE POP HL RET NC LD A,B AND A JR NZ,DATIN1 JR RDSEC1 ; BACK IN A,88H OR 1 ;CAOS ein OUT 88H,A LD A,(0B781H) CP 2 JP NC,RESET ENDCM1 ;Ende bei JUMP FC mit Parameter LD A,(0E011H) CP 7FH JR Z,NOTC31 IN A,88H OR 80H ;BASIC ein OUT 88H,A NOTC31 LD L,46H WFRDE LD BC,80F3H IN A,(C) CP 48H JR Z,AEXEC CP 0C8H JR Z,FLEND LD A,11H CALL PV1 DB 14H DEC L JR NZ,WFRDE FLEND JP RESET ; AEXEC LD HL,0B700H LD BC,80F2H AE1 IN A,(C) LD M,A INC L INC B JR NZ,AE1 LD L,B LD (0B7D1H),HL SET 6,(IX+8) CALL PV1 DB 23H,0CH,13,10,0 CALL PV1 DB 12H ;LOOP ENDCM0 ;Ende bei JUMP FC ohne Param. ORG RFILEIN+$-FILEIN ;Programmschrott, von Diskette her- ;r}hrend (Ende=FC80h, Kopie von F5BC!) LD A,C IN A,(C) RRCA JR C,$-3 BIT 6,A JR Z,$+17 INC B IN A,(C) CALL PV1 DB 1CH CALL PV1 DB 19H LD HL,(0B797H) JP (HL) DEC C INI INC B INC B PUSH HL SBC HL,DE POP HL RET NC LD A,B AND A JR NZ,$-11 JR $-45 IN A,88H OR 1 OUT 88H,A LD A,(0B781H) CP 2 JP NC,0E000H LD A,(0E011H) CP 7FH JR Z,$+8 IN A,88H OR 80H OUT 88H ;Freier ROM-Speicher DS 0FFFEH-$,0FFH DW 23FFH ;Pr}fsumme ROM END  Ā@Āt(Āp6ĀnTop of Text: End of Text: Start of MC: ASM-OffM-Speicher DS 0FFFEH-$,0FFH DW 23FFH ;Pr}fsumme ROM END  Ā@Āt(Āp6ĀnTop of Text: End of Text: Start of MC: ASM-Off