;************************************************ ; ;ROM-BETRIEBSSYSTEM FUER BIC A5105 ; ;Teil: Initialisierung, Drucker und allgemeine UP ; ;STAND: 17.05.89 / LUDEWIG ; ;************************************************ ; ;Externals EXTERNAL JCPSTX JTCHAR JTYPTS JBAINI EXTERNAL CHRO98 ERDEVI TCHAR0 EXTERNAL ZG ;Globals GLOBAL INKEY RDRIPU OUTASC PRTOUT PRSTA PRTREI ;************************************************ ; ;Vereinbarungen ;================================================ CTC0 EQU 80H CTC1 EQU CTC0+1 CTC2 EQU CTC0+2 CTC3 EQU CTC0+3 COND K4 CTCVT EQU CTC0 ;Vorteiler (K4) CTCIR EQU CTC2 ;20 ms IR (K4) ENDC ; ------------------------ DPIOA EQU 90H KPIOA EQU DPIOA+2 ; DPIOB EQU DPIOA+1 ;Versch. E/A KPIOB EQU DPIOA+3 ; ; TXD EQU 1 ;TxD-Bit CTS EQU 4 ;CTS-Bit ; ------------------------ PPIA EQU 0A8H ;Bankumschaltung PPIB EQU 0A9H ;Eing. Zeilenleitungen PPIC EQU 0AAH ;Ausg. Bit 0-3: Spaltennr. ; Keyclick,Diode,Kassette,Motor PPIM EQU 0ABH ;Bitmanipulation Port C ; ------------------------ DCTC0 EQU 50H ;DSE-CTC DKPIOA EQU 62H ;DSE-SIO Kdo Port A ; ------------------------ CR EQU 0DH ;Carriage return LF EQU 0AH ;Line feed ;************************************************ RESET: di jp SPEKO ;SPEicherKOnfiguration ; DEFW ZG ;ZeichenGenerator DEFW INJOY JP JCPSTX DEFB 0 jp LREB ;Long REad Byte DEFB 0 JP JTCHAR DEFB 0 jp LWRB ;Long WRite Byte DEFB 0 jp CHARO ;CHARacterOut DEFB 0 JP L3CALL ;Long-3-CALL DEFB 0 jp CPREG ;ComPare REGister DEFB 0 jp BANKUM ;BANKUMschaltung DEFB 0 JP JTYPTS DEFW 13A1H ;Format Datumseingabe JP REZEMU ;REad ZEichenMUster jp L2CALL ;Long-2-CALL JP TCHAR0 DEFW NACALL JP RST38 ;RST38 (absturz) jp MUINI ;MUsikINIt jp FTINI ;FTastenINIt JP VDPCOM ;VDP in COmmandoMode jp VDPDAM ;VDP in DAtenMode JP PRGVDP ;PRoG VDP JP RDVRM ;RaeD Video-RaM JP WRTVRM ;WRiTe Video-RaM JP VDPREM ;VDP in REadMode JP VDPWRM ;VDP in WRiteMode JP OUTBCA ;OUT BC-mal A-register jp INBCDE ;IN BC-mal nach DE-adresse jp OTBCDE ;OuT BC-mal von DE-adresse jp SELSCR ;SELect SCReen jp PR7VDP ;PRog reg7 VDP DEFB 0 jp NMI jp SPRRES ;SPRiteRESet JP SSCR0 ;Set SCReen0 JP SSCR1 ;Set SCReen 1 JP SSCR2 JP SSCR3 JP VDPSC0 ;VDP prog SCreen0 JP VDPSC1 JP VDPSC2 JP VDPSC3 jp GSPRAD ;Get SPRiteADresse jp GSPRAT ;Get SPRiteATtribut JP TESPRM ;TEst SPRiteMode jp TXTGSC ;TeXT in GrafikSCreen jp MUINIT ;MUsikINIT JP MUOTAE ;MUsikOuT A=regnr E=kdo jp INPPSG ;INPut vom PSG jp MUZELV ;MUsikZELlen Verwalten jp ICONST ;INKEY jp ICONIN ;RDRIPU, ReaD RIngPUffer jp ICONOUT ;OUTASC, OUT A-reg to SCreen JP PRTREI ;PRinterTREIber JP ILISTST ;PRSTA ,PRinterSTAtus JP CHRTST ;CHaRacterTeST jp EDI1 jp EDI2 jp GETST ;GET STring JP DSTPTS ;Direkter SToPTeSt JP STPTST ;SToPTeST jp BREAK jp BEEP jp ZCLS ;Z-flagabh. CLS jp CRSPOS ;CuRSorPOS jp BKEYAN ;Bedingte KEYANzeige jp KEYOFF JP KEYON JP LATXTM ;screen to LAst TeXTMode jp GSTICK ;Get STICK jp GSTRIG ;Get STRIG jp GPAD ;Get PAD jp GPDL ;Get PDL jp INVT ;INput VorTon jp INBYTE ;INput BYTE JP MOFF ;Motor OFF jp OUTVT ;OUTput VorTon jp OUTBYT ;OUTput BYTe jp WMOFF ;Wait and Motor OFF jp MOTST ;MOTorSTeuerung jp MU1D ;MUsik-1-Dummy jp MUPUW ;MUsikPUffer Write JP APRGT1 ;Adr Punkt RiGhT 1 jp APLFT1 ;Adr Punkt LeFT 1 jp APUP10 ;Adr Punkt UP 1 jp APUP ;Adr Punkt UP jp APDWN1 ;Adr Punt DoWN 1 JP APDWN ;Adr Punkt DoWN JP TPPOS ;Test PunktPOSition jp MKPMA ;MaKe PunktMusterAdr JP LDPMA ;LoaD PunktMusterAdr JP STPMA ;STore PunktMusterAdr jp STAINK ;STore Akt INK JP GPOINT ;Get POINT JP SPOINT ;Set POINT jp FILL ;FILL jp LDELLI ;LoaD ELLIpsenparam jp PAIUP1 ;PAInt-UP 1 jp PAIUP2 ;PAInt-UP 2 jp PAIUP3 ;PAInt-UP 3 jp CAPLED ;CAPsLED bedienen jp KEYCLK ;KEYCLicK neg jp DBAABF ;Direkte BAnkABFrage jp DBAUM ;Direkte BAnkUMschaltung jp STAVDP ;STAtus VDP jp DTMABF ;Direkte TastenMatrixABFrage jp DUMMY1 jp DUMMY2 jp TAFCB ;Test Akt FCB JP ILIST ;PRTOUT ;PRinTerOUTput jp MUR1 ;MUsikRechnung 1 jp MUR2 jp LORIPU ;LOeschen RIngPUffer JP L1CALL ;Long-1-CALL ; ------------------------ JP VFTINI ;neue Spruenge JP RDMOD JP WRMOD JP SETBOR JP BSINIT JP TGRASC JP SETPAL JP SETPAP JP KOMSCR JP WRZEMU JP PUTSPR JP MONTV JP GETA35 JP RIPUZI JP CAPSB DEFW ZLLAST DEFW FKEY1 DEFW SCHRIP DEFW STCSSW DEFW CAPSSW DEFW IRT JP WAITBC JP REMASK ;*********************************************** ;SPEicherKOnfiguration bestimmen (02D7H) ; ;IN: DI ;OUT: DI / SP undefiniert !! ; SPEKO: LD A,66H ;PIO B programmieren OUT (DPIOB),A LD A,0CFH ; Bit-EA OUT (KPIOB),A LD A,99H ; Bit 7,4,3,0=Eingang OUT (KPIOB),A LD A,7 ; DI, keine Maske OUT (KPIOB),A LD A,66H ; 1.Ausgabe OUT (DPIOB),A ; ------------------------ ld a,82H ;PPI Port A,C: Out out (PPIM),a ; Port B: In SPEK10: ld a,0a0h ;0H,4000H auf Bank 0 out (PPIA),a ; 8000H,C000H auf Bank 2 ld a,50H ;Motor aus,Tape aus out (PPIC),a ; CAP-LED aus,Keyclick an ; ------------------------ LD A,3 ;Software-RESET (DI) fuer OUT (KPIOA),A OUT (CTC1),A OUT (CTC3),A ; OUT (DCTC0),A ; nicht benutzte OUT (DCTC0+1),A OUT (DCTC0+2),A OUT (DCTC0+3),A OUT (DKPIOA),A OUT (DKPIOA+1),A ; EA-Kanaele ; ------------------------ im 2 LD HL,IRT LD A,H LD I,A ;I-Reg laden ; ------------------------ LD A,L ;CTC:IR-Vektor OUT (CTC0),A LD A,7 ;DI,Zeitgeber OUT (CTCVT),A LD A,43 OUT (CTCVT),A LD A,0C7H ;EI,Zaehler OUT (CTCIR),A LD A,109 ;20 ms OUT (CTCIR),A ; ------------------------ LD A,18H ;DSE-SIO OUT (6AH),A ; RESET Kanal A (LAN) OUT (6BH),A ; Kanal B (Plotter) LD A,2 OUT (6BH),A LD HL,SIOVEK LD A,L OUT (6BH),A ; IR-Vektor ; ------------------------ ld a,1 out (58h),a ;DSE 8000h fuer Sonderserie ; ------------------------ ld bc,XIRSY1-LREUP-1 ld de,LREUP+1 ld hl,LREUP ld (hl),0 ;LREUP...XIRSY1-1 ldir ; mit 00H laden ; ------------------------ LD HL,YIRSYS ;IR-Rahmen in RAM kopieren LD DE,RIRSYS LD BC,STPTST-YIRSYS LDIR ; ------------------------ LD HL,RIRSYS LD (IRT+(CTCIR-80H)*2),HL ;IRT laden jp JBAINI ;*********************************************** ;Long REad Byte (01B6H) ; ;IN: A=Banknr. (Bit 7=0, Bit 1,0=Banknr.) ; HL=Speicheradresse ;OUT: A=Byte ;REG: AF, BC, DE ; LREB: call MABAUM in a,(PPIA) ld d,a ;D= Istbank and c or b ;A= Zielbank call LREUP ld a,e ;A=E= Byte ret ;------------------------------- ; (F380H) ;LREUP: OUT (PPIA),A ;Bank umschalten ; LD E,(HL) ;Byte lesen ; JR LWRUP1 ;*********************************************** ;Long WRite Byte (01D1H) ; ;IN: A=Banknr. (Bit 7=0, Bit 1,0=Banknr.) ; HL=Speicheradresse ; E=Byte ;OUT: ;REG: AF, BC, D ; LWRB: push de ;Byte retten call MABAUM pop de ;Byte zur in a,(PPIA) ld d,a ;D= Istbank and c or b ;A= Zielbank jp LWRUP ;RET ;------------------------------- ; (F385H) ;LWRUP: OUT (PPIA),A ;Bank umschalten ; LD (HL),E ;Byte schreiben ;LWRUP1:LD A,D ; OUT (PPIA),A ;Bank rueckschalten ; RET ;************************************************ ;Long 1 CALL (01FFH) ; ;IN: (BASUB)= Banknr. (Bit 7=0, Bit 1,0=Banknr.) ; IX=Speicheradresse ;OUT: DI ! ;REG: ALLE ! ; L1CALL: ld iy,(BASUB-1) jr L3CALL ;************************************************ ;Long 2 CALL (0205H) ; ;IN: 3 Byte nach Aufruf: Banknr. (Bit 7=0, Bit 1,0=Banknr.) ; Speicheradresse ;OUT: Retadr=Retadr+3 / DI ! ;REG: ALLE ! ; L2CALL: ex (sp),hl push af push de ld a,(hl) push af pop iy ;H(IY)= Zielbank inc hl ld e,(hl) inc hl ld d,(hl) inc hl push de pop ix ;IX= Adr pop de pop af ex (sp),hl ;Retadr+3 in Stack ;************************************************ ;Long 3 CALL (0217H) ; ;IN: H(IY)=Banknr. (Bit 7=0, Bit 1,0=Banknr.) ; IX=Speicheradresse ;OUT: DI ! ;REG: ALLE ! ; L3CALL: DI exx ;BC' - HL' ex af,af' ;AF' ; ------------------------ push iy pop af ;A'= Zielbank push ix pop hl ;HL'= Adr call MABAUM ; ------------------------ in a,(PPIA) push af ;Istbank im Stack and c or b ;A'= Zielbank exx ;BC - HL jp LCAUP ;------------------------------- ; (F38CH) ;LCAUP: OUT (PPIA),A ;Bank umschalten ; EX AF,AF' ;AF ; CALL LCAUP1 ; EX AF,AF' ;AF' ; POP AF ; OUT (PPIA),A ;Bank rueckschalten ; EX AF,AF' ;AF ; RET ; ;LCAUP1:JP (IX) ;(F398H) ;*********************************************** ;BANKUMschaltung (025EH) ; ;IN: A=Banknr. (Bit 7=0, Bit 1,0=Banknr.) ; HL=Speicheradresse ;OUT: ;REG: Alle ; BANKUM: call MABAUM in a,(PPIA) and c or b out (PPIA),a ;Bank umschalten ret ;************************************************************ ;Direkte BAnkABfrage (144CH) ; DBAABF: in a,(PPIA) ;A=akt. Bankkonfiguration ret ;************************************************************ ;Direkte BAnkUMschaltung (144FH) ; DBAUM: out (PPIA),a ;Soll-Bankkonfiguration ret ;*********************************************** ;MAsken fuer BAnkUMschaltung ermitteln (027EH) ;IN: A=Zielbank / HL=Adr ;OUT: A,HL unveraendert / B,C = Masken ;REG: D,E ; MABAUM: push af ld a,h rlca rlca and 3 ld e,a ld a,0C0H MABA10: rlca rlca dec e jp p,MABA10 ld e,a cpl ld c,a pop af push af and 3 inc a ld b,a ld a,-55H MABA20: add a,55H djnz MABA20 ld d,a and e ld b,a pop af ret ;*********************************************** ;PRinterTREIber (085DH) ; ;IN: A:Zeichen ;OUT: NC=Ausgabe i.O. / A=Zeichen / EI ! ; C=Abbruch mit STOP / (LPTPOS)=0 / A=Zeichen / EI ! ;REG: F ; PRTREI: call XPRTRE ;(0FFB6H) push af ; ------------------------- PRTR2 CALL PRSTA ;Status mit CTRL-STOP-Abfrage JR C,PRTR6 jr z,PRTR2 ; ------------------------ pop af PRTR4: push af call V24OUT ;Zeichenausgabe (DI/EI!) pop af and a ;CY=0 ret ;------------------------------- PRTR6 xor a ld (LPTPOS),a ld a,CR call V24OUT ld a,LF call V24OUT pop af scf ;Fehler-->CY=1 ret ;************************************************ ;PRinterSTAtus (0884H) ; ;IN: - ;OUT: NC,NZ = bereit / NC,Z oder C,Z = nicht bereit ; C,NZ = gibt es nicht!! ;REG AF ; PRSTA: call XPRSTA ;(0FFBBH) ; ------------------------- call DSTPTS ;STOP-Tastenabfrage JR NC,PRST3 JR Z,PRST3 XOR A ;Z: nicht bereit SCF ;C: Abbruch mit CTRL-STOP RET ; ------------------------ PRST3 in a,(DPIOB) XOR 2**CTS ;CTS-BIT neg BIT CTS,A ;Z/NZ: nicht bereit / bereit ret ;NC: kein CTRL-STOP ;************************************************ ;V24-OUTput ; ;IN: A=Zeichen ;OUT: EI ! ;REG: AF ; V24OUT: CALL XV24OU PUSH BC PUSH DE PUSH HL ;------------------------------- LD D,0FFH ;Stop- u. Paritaetsbit in D LD B,9 ;Bitanzahl LD HL,(V24FO) ;L=V24FO BIT 4,L JR Z,V24O10 ; ------------------------ INC B ;2 Stopbit ;------------------------------- V24O10: BIT 6,L JR Z,V24O20 ; ------------------------ INC B ;mit Paritaet BIT 7,L JR NZ,V24O13 AND 7FH ;nur 7 Datenbit V24O13: BIT 5,L ;Sollparitaet gerade? JR Z,V24O16 ; Ja--> ; AND A ;Istparitaet bilden JP PO,V24O18 ; Istparitaet ungerade--> JR V24O20 ; Istparitaet gerade--> ; V24O16: AND A ;Istparitaet bilden JP PO,V24O20 ; Istparitaet ungerade--> V24O18: RES 0,D ; Paritaetsbit in D = 0 ;------------------------------- V24O20: LD E,A SLA E ;Startbit anfuegen BIT 7,L JR Z,V24O30 ; ------------------------ RL D ;8. Datenbit INC B ;------------------------------- V24O30: LD A,L LD HL,1 ;ZK fuer 19200 Baud AND 7 JR Z,V24O40 V24O35: ADD HL,HL ;ZK=ZK*2 DEC A JR NZ,V24O35 ;------------------------------- V24O40: DI ;DI IN A,(DPIOB) ;PIO ruecklesen ; ------------------------ V24O45: RRA RRA RR D RR E RLA RLA OUT (DPIOB),A ;Bitweise Ausgabe ; ------------------------ PUSH HL ;Mod. 1. Durchlauf CP (HL) JR V24O55 V24O50: EX (SP),IX ;Zeitschleife EX (SP),IX EX (SP),IX EX (SP),IX NOP V24O55: EX (SP),IX EX (SP),IX DEC HL LD C,A LD A,H OR L LD A,C JR NZ,V24O50 ; ------------------------ POP HL DJNZ V24O45 ;naechstes Bit ;------------------------------- POP HL POP DE POP BC EI ;EI RET ;************************************************ ; (1398H) NMI: call XNMI ;(0FDD6H) retn ;************************************************ ;Test Aktueller FCB (145FH) ; ;OUT:Z: (ACTFCB)=0 / NZ: (ACTFCB)<>0 ;REG: AF ; TAFCB: call XTAFCB ;(0FEDFH) push hl ld hl,(ACTFCB) ld a,l or h pop hl ret ;************************************************************ ;ComPare REGister hl und de (146AH) ; ;OUT: HL,DE unveraendert / Flags entspr Vergleich ;REG: AF ; CPREG: ld a,h sub d ret nz ld a,l sub e ret ;************************************************************ ; (148AH) DUMMY1: JP XDUMM1 ;(0FFA7H) ;************************************************************ ; (148EH) DUMMY2: JP XDUMM2 ;(0FFACH) ;************************************************************ ;CHARacter Output (1B45H) ; ;IN: A=Zeichen ;OUT: A=Zeichen ;REG: F, IX ; CHARO: PUSH AF CALL XCHRO ;------------------------------- CALL TAFCB ;Conout ueber FCB? JR Z,CHARO2 ; Nein--> POP AF LD IX,CHRO98 JP L1CALL ;------------------------------- CHARO2: LD A,(PTORSC) OR A ;Screen? JR NZ,CHARO4 ; Nein--> pop af jp ICONOUT ;SCREEN-Ausgabe ;------------------------------- CHARO4 POP AF ;Printer JP ILIST ;************************************************************ ;PRinTerOUTput (1B63H) ; ;IN: A=Zeichen ;OUT: BASIC: NC: Ausgabe i.O. / A=Zeichen / EI ! ; bei CTRL-STOP: hart zu ERDEVI / EI ! ; SCP: NC: Ausgabe i.O. / A=Zeichen / EI! ; C : Abbruch mit CTRL-STOP / A=Zeichen / EI! ;REG: F ; HL (nur im SCP) ; PRTOUT: CALL XPRTOU PUSH HL PUSH AF ;=============================== LD HL,(DRUTYP) ;L=DRUTYP LD A,(BSKENN) LD H,A ;H=BSKENN POP AF PUSH AF BIT 4,L ;mit Steuerzeichenauswertung? JR NZ,PRTO60 ; Nein--> ;=============================== cp 9 jr nz,PRTO20 ; ------------------------ PRTO10: ld a,20H ;TAB in call PRTOUT JR C,PRTO65 ld a,(LPTPOS) and 7 jr nz,PRTO10 ; SPC wandeln JR PRTO65 ;RET (NC) ;=============================== PRTO20: sub CR ;CR? jr z,PRTO30 ; Ja (A=0)--> ; ------------------------ jr c,PRTO40 ;andere Steuerzeichen? cp 13H jr c,PRTO40 ; Ja--> ; ------------------------ ld a,(LPTPOS) inc a ;Zeichenzaehler ink PRTO30 ld (LPTPOS),a ;=============================== PRTO40 POP AF PUSH AF ;------------------------------- BIT 5,L ;Linker Rand? JR Z,PRTO42 ; Nein--> ; ------------------------ CP 0DH JR NZ,PRTO42 ; CALL PRTREI ;Ausgabe CR JR C,PRTO65 JR PRTO10 ; +linker Rand ;=============================== PRTO42 BIT 1,H ;SCP? JR NZ,PRTO55 ; Ja--> ; ------------------------ BIT 3,L ;IBM-Drucker? jr nz,PRTO45 ; Nein--> ; ------------------------ call CHRTST ;2.Grapbyte-40H, jr c,PRTO60 ; sonst unveraend ld a,1bh ;GCH-->ESC ^ call PRTREI jr c,PRTO65 ld a,'^' jr PRTO60 ;=============================== PRTO45 call CHRTST jr nc,PRTO65 ;GCH-->RET jr z,PRTO55 ; sonst--> PRTO50 ld a,'*' ; 2.Graphbyte jr PRTO60 ; wandeln in Stern ;------------------------------- PRTO55 BIT 2,L JR Z,PRTO60 ;EPSON--> CP 80H JR NC,PRTO50 ;sonst >80H in Stern ;=============================== PRTO60: call PRTREI ; ------------------------ PRTO65 POP HL LD A,H POP HL CALL XPRTO2 ;RET bei SCP ret nc ;OK-->RET ; ======================== ld ix,ERDEVI jp L1CALL ;Fehler ;************************************************************ ;RST38 = absturz oder break ; RST38: CALL XRST38 DI HALT ;************************************************************ ÿªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª