From e0d688a45a03315cb29b9c6bf6d4462f2f92fbab Mon Sep 17 00:00:00 2001 From: Dave Schmenk Date: Sun, 19 Jan 2020 13:11:09 -0800 Subject: [PATCH] SHR library --- src/libsrc/apple/shrlib.pla | 181 ++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 src/libsrc/apple/shrlib.pla diff --git a/src/libsrc/apple/shrlib.pla b/src/libsrc/apple/shrlib.pla new file mode 100644 index 0000000..4ef32f7 --- /dev/null +++ b/src/libsrc/apple/shrlib.pla @@ -0,0 +1,181 @@ +include "inc/cmdsys.plh" +// +// Apple II hardware constants. +// +const store80dis = $C000 +const store80en = $C001 +const vidctl = $C029 +const showgraphics = $C050 +const showtext = $C051 +const showfull = $C052 +const showmix = $C053 +const showpage1 = $C054 +const showpage2 = $C055 +const showlores = $C056 +const showhires = $C057 +const show40 = $C00C +const show80 = $C00D +const mapmain = $C000 +const mapaux = $C001 +const an3on = $C05E +const an3off = $C05F +const ena80 = $C07E +const dis80 = $C07F +const pixbuf = $2000 +const scbbuf = $9D00 +const palbuf = $9E00 +const scb640 = $80 // 640 PIXEL SUPER-HIRES +const scb320 = $00 // 320 PIXEL SUPER-HIRES + +word palette = $0000, $0007, $0070, $0077, $0700, $0707, $0770, $0 +word = $0CCC, $000F, $00F0, $00FF, $0F00, $0F0F, $0FF0, $0FFF + + +asm shrInc(buff) +!SOURCE "vmsrc/plvmzp.inc" +GBASL = $26 +GBASH = $27 +GBASE = GBASL +GCLR = $30 +STORE80DIS = $C000 +STORE80EN = $C001 +MAINWRT = $C004 +AUXWRT = $C005 +VIDCTL = $C029 +SHADOW = $C035 +end +// +// This gets copied to $0100!!! +// +asm auxRead + STA $C003 ; READ AUX MEM + LDA (GBASE),Y + STA $C002 ; READ MAIN MEM + RTS +end +// +// Peek byte from SHR memory +// +asm shrPeek(addr) + LDA ESTKL,X + STA GBASL + LDA ESTKH,X + STA GBASH + LDY #$00 + STY ESTKH,X + PHP + SEI + LDA SHADOW + AND #$F7 + STA SHADOW + JSR $0100 + STA ESTKL,X + LDA SHADOW + ORA #$08 + STA SHADOW + PLP + RTS +end +// +// Poke byte into SHR memory +// +asm shrPoke(addr, data)#0 + LDA ESTKL+1,X + STA GBASL + LDA ESTKH+1,X + STA GBASH + LDY #$00 + PHP + SEI + LDA SHADOW + AND #$F7 + STA SHADOW + LDA ESTKL+0,X + STA AUXWRT + STA (GBASE),Y + STA MAINWRT + LDA SHADOW + ORA #$08 + STA SHADOW + PLP + INX + INX + RTS +end +// +// Fill byte into SHR memory +// +asm shrFill(addr, data, len)#0 + LDA ESTKL+2,X + STA GBASL + LDA ESTKH+2,X + STA GBASH + LDY #$00 + PHP + SEI + LDA SHADOW + AND #$F7 + STA SHADOW + LDA ESTKL+1,X + STA AUXWRT +- STA (GBASE),Y + INY + BNE + + INC GBASH ++ DEC ESTKL+0,X + BNE - + DEC ESTKH+0,X + BNE - + STA MAINWRT + LDA SHADOW + ORA #$08 + STA SHADOW + PLP + INX + INX + RTS +end +export def shrPalette(pal, rgbptr)#0 + word palptr + byte i + + palptr = palbuf + pal * 32 + for i = 0 to 31 + shrPoke(palptr + i, ^(rgbptr + i)) + next +end +export def shrMode(mode)#0 + byte row, scb + if mode + // + // Set super hires graphics + // + if mode == 640 + scb = scb640 + else + scb = scb320 + fin + for row = 0 to 199 + shrPoke(scbbuf + row, scb) + shrRowPalette(row, palette) + next + ^store80dis = 0 // Turn off 80 column mode + ^vidctl = ^vidctl | $80 // Turn on SHR mode + return + fin + // + // Set text mode + // + ^vidctl = ^vidctl & $7F + ^showtext + ^showpage1 + ^ena80 = 0 + ^show40 = 0 + ^mapmain = 0 + ^an3off + call($FC58, 0, 0, 0, 0) // home() +end + +// Put read AUX mem routine in scary location +memcpy($0100, @auxRead, 9) +done