From 98cab31fc3659e33aef260efca55bf9f1753164c Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 11 Feb 2019 11:49:19 +0100 Subject: Add source files from Michael --- system/shard-z80-ruc-64180/1.5/src/CONOUT4.INC | 467 +++++++++++++++++++++++++ 1 file changed, 467 insertions(+) create mode 100644 system/shard-z80-ruc-64180/1.5/src/CONOUT4.INC (limited to 'system/shard-z80-ruc-64180/1.5/src/CONOUT4.INC') diff --git a/system/shard-z80-ruc-64180/1.5/src/CONOUT4.INC b/system/shard-z80-ruc-64180/1.5/src/CONOUT4.INC new file mode 100644 index 0000000..89120f8 --- /dev/null +++ b/system/shard-z80-ruc-64180/1.5/src/CONOUT4.INC @@ -0,0 +1,467 @@ + +; +; CONOUT4.INC +; +; Character auf BASIS 108 80-Zeichen ausgeben +; +; Copyright (c) 1985 by Joerg Stattaus +; +; Modified for psi by R. Ellerbrake +; +; C=char +; +; Version 17.09.85 +; Stand: 22.12.86, mit Zeichensatzeinstellung (M.St) +; 31.12.86, Mod. fuer 6502-Teil > 0C00 +; + +crtout: + ld hl,gotocnt ; GotoXY in Aktion ? + ld a,(hl) + or a + jr z,crt2 + + dec (hl) + ld a,c + jr z,crt1 ; Get X-Value + + ld (gotoy),a ; Y storen + ret + +crt1: ld (gotox),a + + ld b,7 ; Gotoxy is Function 7 + jr conq + +crt2: + ld b,a + ld a,c + +crt3: cp ' ' + jr nc,conq ; normales Zeichen + +crt4: ld hl,scrfen ; In Tabelle nach Zeichen suchen + ld b,22 +crt5: cp (hl) + jr z,crtfnd ; Sequenz erkannt + + dec hl + djnz crt5 + + ret ; nicht in der Tabelle enthalten + +crtfnd: ld a,b ; Found + cp 7 + jr nz,conq +; + ld a,2 + ld (gotocnt),a ; next 2 Bytes sind Koordinaten + RET + +SWICUR: + LD B,23 ; Cursor invertieren +conq: + LD A,I ; IEF2 retten + PUSH AF + DI ; keine Interrupts zulassen +; + in0 a,(cbar) ; Set CommonBaseAreaRegister for Video + ld (oldcbar),a + ld a,biosbank + out0 (cbar),a +; + IN0 A,(BBR) ; Set Bank Base Register + LD (OLDBBR),A + LD A,AR6502 + OUT0 (BBR),A +; + LD (STKSAV),SP ; alten SP retten (im umgeschalteten Bereich) + LD SP,STACK +; + CALL CONQ1 ; Print Char. on screen +; + LD SP,(STKSAV) ; alten Stack zurueckholen +; + LD A,(OLDBBR) ; restore old BBR + OUT0 (BBR),A + ld a,(oldcbar) ; and CBAR + out0 (cbar),a + POP AF ; IEF2 zurueckholen + RET PO ; vorher kein EI -> +; + EI ;reenable Interrupts + RET + +; B=Sequenz / C=Char + +conq1: ld hl,(scradr) + ld de,(scrxy) + ld a,e + rra + + CALL ZGERL ; Zugriff erlaubt ? + ld (stram1),a ; Dyn./Static RAM + jr nc,conq2 + ld (stram2),a +conq2: + ld a,b + or a + jr nz,scrfkt ; Screen-Function + + ld a,(invmod) ; schreibe Zeichen auf Bildschirm + or c + ld (hl),a +adv0: ex de,hl + inc hl + ld a,l + cp 80 + jp c,onlinc + + ld l,0 + inc h + ld a,h + cp 24 + jp c,calc + + ; scroll noetig + + ld l,0 +scroll: dec h + push hl + ld d,0 + call del0 ; delete Zeile 0 + + pop hl +calc: ld (scrxy),hl + ld e,l + ld a,h + call basclc + ld a,e ; hl=lineadr / a=scrxyr + srl a + + ld (stram1),a + jr nc,calc3 + ld (stram2),a +calc3: + add a,l + ld l,a +calc4: ld (scradr),hl +calc5: ld a,(hl) ; get char on cursor adr + ld (curchr),a + ld a,(curinv) + xor (hl) + ld (hl),a ; invers zurueck + ld (stram1),a + +crtret: ret + +onlinc: ld (scrxy),a ; normales increment des scr.poi. + ex de,hl ; HL wieder = scradr + rra + + ld (stram2),a + jr c,calc5 ; selbe Adresse, 2. Seite + ld (stram1),a + inc hl + jr calc4 + +scrfkt: ld a,(curchr) ; Restore Char on Screen + ld (hl),a + ld a,b + ld hl,scrtab-2 + add a,a + add a,l + ld l,a + LD A,H ; cross page boundary ? + ADC A,0 + LD H,A + ld a,(hl) + inc hl + ld h,(hl) + ld l,a + jp (hl) + +; Screen-Functions + +advanc: ld hl,(scradr) + jr adv0 + +schome: ld hl,0 + jr tocalc + +gotoxy: ld hl,(gotox) ; H=Y / L=X +got0: ld a,h + cp 24 + jr c,got1 + + ld h,0 +got1: ld a,l + cp 80 + jr c,tocalc + +got2: ld l,0 + jr tocalc + +up: ex de,hl + dec h + jr got0 + +carret: ex de,hl + jr got2 + +backsp: ex de,hl + dec hl + ld a,l + cp 80 + jr c,tocalc + + ld l,79 + jr got0 + +linefd: ex de,hl + inc h + ld a,h + cp 24 + jr c,tocalc + + jp scroll + +erapag: push de + call erap0 + pop hl +tocalc: jp calc + +eralin: push de + call eral2 + pop hl + jr tocalc + +insert: push de + ld a,d ; korrigiert + ld de,SCREEN+003d0h ; Zeile 23 + cp 23 + jr z,ins1 ; kein Verschieben + + ld b,23 +ins0: dec b + call linmov + ld a,(scrxy+1) ; Vertikal Adresse + cp b + jr nz,ins0 + +ins1: call blank + pop hl + jr got2 + +delete: push de + call del0 + pop hl + jr got2 + +normal: ld a,80h + jr inv1 + +invers: xor a +inv1: ld (invmod),a +; +inv2: ex de,hl + jr tocalc + +chacur: ld hl,curinv + ld a,(hl) + xor 80h + ld (hl),a + jr inv2 + +clear: call schome + ld de,0 + push de + call erap0 + pop hl + jr tocalc + +bell: push hl + ld a,(BEEPFRQ) + ld h,a + ld l,2 ; task beep + call to6502 + pop hl ; transport scrxy to HL + ret + +eral2: ld hl,(scradr) + push hl + ld (stram1),a + ld a,e + srl a + jr nc,eral3 + + inc a + inc hl +eral3: call erablk + + ld (stram2),a + pop hl + ld a,e + srl a +erablk: sub 41 + cpl + ld b,0a0h +erabl1: or a + ret z + ld (hl),b + inc hl + dec a + jr erabl1 + +erap0: call eral2 + ld a,(scrxy+1) +erap1: inc a + cp 24 + ret nc + + push af + call basclc + + ex de,hl + call blank + pop af + jr erap1 + +del0: ld a,d + cp 23 + ld de,SCREEN+003d0h ; Zeile 23 + jr z,blank + + push af + call basclc + pop bc ; Vert. Adr. von D -> A -> B + + ex de,hl +del1: inc b + call linmov + ld a,b + cp 23 + jr c,del1 + +blank: ld (stram1),a + ld a,' '+80h + push de + call blank1 + pop de + ld (stram2),a + +blank1: ld b,40 +blank2: ld (de),a + inc de + djnz blank2 + + ret + +linmov: push bc + ld a,b + call basclc + ld (stram1),a + push hl + push de + ld bc,40 + ldir ; eine Zeile + pop de + pop hl + push hl + ld (stram2),a + ld bc,40 + ldir + pop de ; HL nun in DE = neues Ziel + pop bc + ret + +basclc: ld c,a + ld l,0 + rra + rr l + and 3 + add a,HIGH SCREEN ; screen - start + ld h,a + ld a,c + and 18h + ld c,a + add a,a + add a,a + add a,c ; * 5 = 40 + add a,l + ld l,a + ret ; HL = Line adress + +ger: ; German ASCII + ld (sw0off),a + ld (sw1on),a + ld (sw2off),a + ret + +usa: ; ASCII + ld (sw0off),a + ld (sw1off),a + ld (sw2on),a + ret + +apl: ; APL + ld (sw0off),a + ld (sw1on),a + ld (sw2on),a + ret + +uni: ; ASCII und Inv. APL + ld (sw0on),a + ld (sw1on),a + ld (sw2on),a + ret + +invsw: + ld (swinv),a + ret + +flshsw: + ld (swflsh),a + ret + +; Screen-Command-Definition-Table + +;leadsf:db 1bh +; db 0aah,0d9h,0d4h,0a9h,0a8h,1eh,0bdh,0bh,0ch +; db 0ah,08h,0dh,0cch,0cdh,0dah,07h +; +; EUMEL psi-Terminal Definition +; + DEFB 9 ;Clear Screen (bei psi undefiniert) + DEFB 4 ;Clear to End of Page + DEFB 5 ;Erase to End-of-Line + DEFB 14 ;Endmark (Normal Video) + DEFB 15 ;Beginmark (Invers Video) + DEFB 1 ;Home + DEFB 6 ;Cursor Positionierung + DEFB 3 ;Cursor 1 Zeile nach oben + DEFB 2 ;Cursor nach rechts + DEFB 10 ;Line feed + DEFB 8 ;Backspace + DEFB 13 ;Carriage Return + DEFB 11 ;Insert Line (bei psi undefiniert) + DEFB 12 ;Delete Line (bei psi undefiniert) + DEFB 0 ;NULL (nichts tun) + DEFB 7 ;BELL + DEFB 16 ;GER, Zeichensatz + DEFB 17 ;USA, " + DEFB 18 ;APL, " + DEFB 19 ;UNI, " + DEFB 20 ;Invers > 127 + DEFB 21 ;Flash > 127 + +scrfen equ $-1 + +scrtab: dw clear,erapag,eralin,normal,invers,schome,gotoxy,up,advanc + dw linefd,backsp,carret,insert,delete,CRTRET,bell + dw ger,usa,apl,uni,invsw,flshsw,chacur +; +; CRTRET anstelle von chacur + +; Ende von CONOUT3.INC + \ No newline at end of file -- cgit v1.2.3