1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2026-04-24 12:18:26 +00:00

Break out VBlank waiting into own module

This commit is contained in:
David Schmenk
2025-02-06 17:46:47 -08:00
parent b85234b910
commit f74c11947e
16 changed files with 74 additions and 109 deletions
-1
View File
@@ -46,7 +46,6 @@ import dhgrlib
predef dhgrMemBl7Tile(x7, y, memptr, memspan, tileptr)#0
predef dhgrSet(dhx, y)#0
predef dhgrUnset(dhx, y)#0
predef dhgrVBL#0
predef dhgrOp(op)#0
predef dhgrSurfScr(op)#0
predef dhgrSurfMem(op, memh, memptr, memspan)#0
-33
View File
@@ -2062,32 +2062,6 @@ NXTTS DEX
RETTS RTS
end
//
// Wait for VLB
//
export asm dhgrVBL#0
- LDA $C019
BPL -
- LDA $C019 ; Wait during active video
BMI -
RTS
end
asm _vbl2c#0
PHP
SEI
STA $C07F ; Enable IOU access and reset VBL int on //c
LDA $C041 ; Save VBL int state MSB = BVL int enebaled
STA $C05B ; Enable VBL int
STA $C070 ; Reset VBL int on //c
- BIT $C019
BPL - ; Wait for VBL
ASL
BCS +
STA $C05A ; Disable VBL int on //c
+ STA $C07E ; Disable IOU access on //c
PLP
RTS
end
//
// Slow implementation of Tiles -> Mem
//
def dhgrTileMem(tileptr, memptr, memspan)#0
@@ -2551,11 +2525,4 @@ _dcgrTileScrB:25 = @_dcgrTileScrC.28
_dcgrTileScrB:30 = @_dcgrTileScrC.34
_dcgrTileScrB:35 = @_dcgrTileScrC.40
_dcgrTileScrB:40 = @_dcgrTileScrC.46
//
// Check for //c specific VLB handling
//
if MACHID & MACHID_MODEL == MACHID_IIC
dhgrVBL.0 = $4C // JMP instruction
dhgrVBL:1 = @_vbl2c //c specific VLB processing
fin
done
+3 -2
View File
@@ -6,6 +6,7 @@ include "inc/lz4.plh"
include "inc/longjmp.plh"
include "dhgr.tk/inc/dhgrlib.plh"
include "dhgr.tk/inc/dhgrutils.plh"
include "inc/vblank.plh"
sysflags resxtxt1|reshgr1|resxhgr1|reshgr2|nojitc
const page1m = $C054
@@ -57,10 +58,10 @@ def screenShow(filestr)#0
end
def delay_getkey#1
var busywait
var busywait, wastetime
for busywait = 0 to 60*pause
dhgrVBL
waitVBL
if ^$C000 > 127
return (^$C010 & $7F) == $03
fin
-1
View File
@@ -6,7 +6,6 @@ import dgrlib
predef dgrTile(x, y, src)#0
predef dgrTileStr(x, y, tilestr, strlen, tilebuff)#0
predef dgrFill(x, y, tile)#0
predef dgrVBL#0
predef dgrClear(clr)#0
predef dgrMode(mode)#1
predef dgrShow(page)#1
-1
View File
@@ -6,7 +6,6 @@ import grlib
predef grTile(x, y, src)#0
predef grTileStr(x, y, tilestr, strlen, tilebuff)#0
predef grFill(x, y, tile)#0
predef grVBL#0
predef grClear(clr)#0
predef grMode(mode)#1
predef grShow(page)#1
+3
View File
@@ -0,0 +1,3 @@
import vblank
predef waitVBL#1
end
-33
View File
@@ -492,32 +492,6 @@ asm _dgrFillTile
RTS
end
//
// Wait for VBL
//
export asm dgrVBL#0
- LDA $C019
BPL -
- LDA $C019 ; Wait during active video
BMI -
RTS
end
asm _vbl2c#0
PHP
SEI
STA $C07F ; Enable IOU access and reset VBL int on //c
LDA $C041 ; Save VBL int state MSB = BVL int enebaled
STA $C05B ; Enable VBL int
STA $C070 ; Reset VBL int on //c
- BIT $C019
BPL - ; Wait for VBL
ASL
BCS +
STA $C05A ; Disable VBL int on //c
+ STA $C07E ; Disable IOU access on //c
PLP
RTS
end
//
// Clear the buffer
//
export def dgrClear(clr)#0
@@ -629,13 +603,6 @@ dgrBLT:1 = @drawbuff
dgrBLT:6 = @drawbuff+1
dgrTile:1 = @drawbuff
dgrTile:6 = @drawbuff+1
//
// Check for //c specific VLB handling
//
if MACHID & MACHID_MODEL == MACHID_IIC
dgrVBL.0 = $4C // JMP instruction
dgrVBL:1 = @_vbl2c //c specific VLB processing
fin
// Put read AUX mem routine in scary location
memcpy($0100, @auxRead, 9)
//
-35
View File
@@ -407,32 +407,6 @@ asm _grFillTile
RTS
end
//
// Wait for VBL
//
export asm grVBL#0
- LDA $C019
BPL -
- LDA $C019 ; Wait during active video
BMI -
RTS
end
asm _vbl2c#0
PHP
SEI
STA $C07F ; Enable IOU access and reset VBL int on //c
LDA $C041 ; Save VBL int state MSB = BVL int enebaled
STA $C05B ; Enable VBL int
STA $C070 ; Reset VBL int on //c
- BIT $C019
BPL - ; Wait for VBL
ASL
BCS +
STA $C05A ; Disable VBL int on //c
+ STA $C07E ; Disable IOU access on //c
PLP
RTS
end
//
// Clear the buffer
//
export def grClear(clr)#0
@@ -535,15 +509,6 @@ grBLT:6 = @drawbuff+1
grTile:1 = @drawbuff
grTile:6 = @drawbuff+1
//
// Check for machine specific VLB handling
//
if MACHID & MACHID_MODEL == MACHID_IIC
grVBL.0 = $4C // JMP instruction
grVBL:1 = @_vbl2c //c specific VLB processing
elsif MACHID & MACHID_MODEL <> MACHID_IIE
grVBL.0 = $60 // RTS instruction - do nothing on ][ or ][+
fin
//
// Keep module in memory
//
return modkeep
+54
View File
@@ -0,0 +1,54 @@
include "inc/cmdsys.plh"
//
// Wait for VBL
//
export asm waitVBL#1
!SOURCE "vmsrc/plvmzp.inc"
PHP ; //c version first because its largest
SEI
STA $C07F ; Enable IOU access and reset VBL int on //c
LDA $C041 ; Save VBL int state MSB = BVL int enebaled
STA $C05B ; Enable VBL int
STA $C070 ; Reset VBL int on //c
- BIT $C019
BPL - ; Wait for VBL
ASL
BCS +
STA $C05A ; Disable VBL int on //c
+ STA $C07E ; Disable IOU access on //c
PLP
LDA #$FF ; Return TRUE
DEX
STA ESTKL,X
STA ESTKH,X
RTS
end
asm _vbl2e#1
- LDA $C019 ; //e version
BPL -
- LDA $C019 ; Wait during active video
BMI -
LDA #$FF ; Return TRUE
DEX
STA ESTKL,X
STA ESTKH,X
RTS
end
asm _vblnop#1
LDA #$00 ; NOP version
DEX ; return FALSE
STA ESTKL,X
STA ESTKH,X
RTS
end
asm _vblend#1
end
//
// Check for machine specific VLB handling
//
if MACHID & MACHID_MODEL == MACHID_IIE
memcpy(@waitVBL, @_vbl2e, @_vblnop-@_vbl2e)
elsif MACHID & MACHID_MODEL <> MACHID_IIC
memcpy(@waitVBL, @_vblnop, @_vblend-@_vblnop)
fin
done
+6 -1
View File
@@ -63,6 +63,7 @@ TFTPD = rel/TFTPD\#FE1000
HGRLIB = rel/apple/HGRLIB\#FE1000
GRLIB = rel/apple/GRLIB\#FE1000
DGRLIB = rel/apple/DGRLIB\#FE1000
VBLANK = rel/apple/VBLANK\#FE1000
HGRSPRITE = rel/apple/HGRSPRITE\#FE1000
HGRTILE = rel/apple/HGRTILE\#FE1000
HGRFONT = rel/apple/HGRFONT\#FE1000
@@ -118,7 +119,7 @@ TXTTYPE = .TXT
#SYSTYPE = \#FF2000
#TXTTYPE = \#040000
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(PLVMJIT03) $(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(SOSCMDJIT) $(PLASMAPLASM) $(CODEOPT) $(PLFORTH) $(HRFORTH) $(HR2FORTH) $(TX2FORTH) $(SEXPR) $(SMATH) $(DRAWL) $(ZIPCHIP) $(MATCHFILES) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(COPY) $(DEL) $(REN) $(CAT) $(NEWDIR) $(TYPE) $(INITSLOT) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(SFM) $(SFMSPRT) $(GRAFIX) $(GFXDEMO) $(LINES) $(HGRTILE) $(HGRFONT) $(HGRSPRITE) $(HGRLIB) $(TILETEST) $(HGRTEST) $(GRLIB) $(DGRLIB) $(GRTEST) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) $(CONIOTEST)
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(PLVMJIT03) $(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(SOSCMDJIT) $(PLASMAPLASM) $(CODEOPT) $(PLFORTH) $(HRFORTH) $(HR2FORTH) $(TX2FORTH) $(SEXPR) $(SMATH) $(DRAWL) $(ZIPCHIP) $(MATCHFILES) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(COPY) $(DEL) $(REN) $(CAT) $(NEWDIR) $(TYPE) $(INITSLOT) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(SFM) $(SFMSPRT) $(GRAFIX) $(GFXDEMO) $(LINES) $(HGRTILE) $(HGRFONT) $(HGRSPRITE) $(HGRLIB) $(TILETEST) $(HGRTEST) $(GRLIB) $(DGRLIB) $(VBLANK) $(GRTEST) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) $(CONIOTEST)
-rm vmsrc/plvmzp.inc
@@ -488,6 +489,10 @@ $(DGRLIB): libsrc/apple/dgrlib.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW libsrc/apple/dgrlib.pla
acme --setpc 4094 -o $(DGRLIB) libsrc/apple/dgrlib.a
$(VBLANK): libsrc/apple/vblank.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW libsrc/apple/vblank.pla
acme --setpc 4094 -o $(VBLANK) libsrc/apple/vblank.a
$(TILETEST): samplesrc/tiletest.pla $(PLASM)
./$(PLASM) -AMOW samplesrc/tiletest.pla
acme --setpc 4094 -o $(TILETEST) samplesrc/tiletest.a
+1
View File
@@ -15,6 +15,7 @@ cat inc/hgrsprite.plh | ./ac.jar -ptx $PO_IMAGE bld/inc/HGRSPRITE.PLH TXT
cat inc/hgrlib.plh | ./ac.jar -ptx $PO_IMAGE bld/inc/HGRLIB.PLH TXT
cat inc/grlib.plh | ./ac.jar -ptx $PO_IMAGE bld/inc/GRLIB.PLH TXT
cat inc/dgrlib.plh | ./ac.jar -ptx $PO_IMAGE bld/inc/DGRLIB.PLH TXT
cat inc/vblank.plh | ./ac.jar -ptx $PO_IMAGE bld/inc/VBLANK.PLH TXT
cat inc/fiber.plh | ./ac.jar -ptx $PO_IMAGE bld/inc/FIBER.PLH TXT
cat inc/fileio.plh | ./ac.jar -ptx $PO_IMAGE bld/inc/FILEIO.PLH TXT
cat inc/int32.plh | ./ac.jar -ptx $PO_IMAGE bld/inc/INT32.PLH TXT
+2
View File
@@ -20,6 +20,7 @@ cp rel/apple/HGRSPRITE#FE1000 prodos/sys/HGRSPRITE.REL
cp rel/apple/HGRLIB#FE1000 prodos/sys/HGRLIB.REL
cp rel/apple/GRLIB#FE1000 prodos/sys/GRLIB.REL
cp rel/apple/DGRLIB#FE1000 prodos/sys/DGRLIB.REL
cp rel/apple/VBLANK#FE1000 prodos/sys/VBLANK.REL
cp rel/apple/COPY#FE1000 prodos/sys/COPY.REL
cp rel/apple/DEL#FE1000 prodos/sys/DEL.REL
cp rel/apple/REN#FE1000 prodos/sys/REN.REL
@@ -222,6 +223,7 @@ cp inc/hgrsprite.plh prodos/bld/inc/HGRSPRITE.PLH.TXT
cp inc/hgrlib.plh prodos/bld/inc/HGRLIB.PLH.TXT
cp inc/grlib.plh prodos/bld/inc/GRLIB.PLH.TXT
cp inc/dgrlib.plh prodos/bld/inc/DGRLIB.PLH.TXT
cp inc/vblank.plh prodos/bld/inc/VBLANK.PLH.TXT
cp inc/fiber.plh prodos/bld/inc/FIBER.PLH.TXT
cp inc/fileio.plh prodos/bld/inc/FILEIO.PLH.TXT
cp inc/int32.plh prodos/bld/inc/INT32.PLH.TXT
+1
View File
@@ -18,6 +18,7 @@ cat rel/apple/HGRSPRITE#FE1000 | ./ac.jar -p $PO_IMAGE sys/HGRSPRITE REL
cat rel/apple/HGRLIB#FE1000 | ./ac.jar -p $PO_IMAGE sys/HGRLIB REL
cat rel/apple/GRLIB#FE1000 | ./ac.jar -p $PO_IMAGE sys/GRLIB REL
cat rel/apple/DGRLIB#FE1000 | ./ac.jar -p $PO_IMAGE sys/DGRLIB REL
cat rel/apple/VBLANK#FE1000 | ./ac.jar -p $PO_IMAGE sys/VBLANK REL
#cat rel/apple/COPY#FE1000 | ./ac.jar -p $PO_IMAGE sys/COPY REL
#cat rel/apple/DEL#FE1000 | ./ac.jar -p $PO_IMAGE sys/DEL REL
#cat rel/apple/REN#FE1000 | ./ac.jar -p $PO_IMAGE sys/REN REL
+2 -1
View File
@@ -1,5 +1,6 @@
include "inc/cmdsys.plh"
include "inc/dgrlib.plh"
include "inc/vblank.plh"
include "inc/lines.plh"
sysflags restxt1|restxt2|resxtxt1|resxtxt2 // Reserve all text pages
@@ -47,7 +48,7 @@ def dgrTest#0
while ^$C000 < 128
dgrFill(k, k, @tile1)
dgrBLT(i, j, 8, 8, @sprite1)
dgrVBL
waitVBL
dgrSwap
k++
i = i + ii
+2 -1
View File
@@ -1,5 +1,6 @@
include "inc/cmdsys.plh"
include "inc/grlib.plh"
include "inc/vblank.plh"
include "inc/lines.plh"
sysflags restxt1|restxt2 // Reserve all text pages
@@ -47,7 +48,7 @@ def grTest#0
while ^$C000 < 128
grFill(k, k, @tile1)
grBLT(i, j, 8, 8, @sprite1)
grVBL
waitVBL
grSwap
k++
i = i + ii