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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
import vblank
|
||||
predef waitVBL#1
|
||||
end
|
||||
@@ -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)
|
||||
//
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user