mirror of
https://github.com/dschmenk/PLASMA.git
synced 2026-04-20 16:16:34 +00:00
Another attempt at workable VBL measurement
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
import vblank
|
||||
const VBLUNIMPL = $AAAA
|
||||
predef waitVBL#1
|
||||
predef statusVBL#1
|
||||
end
|
||||
|
||||
+18
-16
@@ -714,27 +714,29 @@ def a2textmode(columns)
|
||||
columns = (cmdsys:_sysflags_ & vid80col) ?? 80 :: 40
|
||||
fin
|
||||
if columns > 40 and MACHID & MACHID_80COL
|
||||
cswsave = *CSW
|
||||
kswsave = *KSW
|
||||
call($C300, 0, 0, 0, 0)
|
||||
if MACHID & $C0 == MACHID_IIE
|
||||
conio:clear = @a2clear80e
|
||||
conio:gotoxy = @a2gotoxy80e
|
||||
conio:textctrl = @a2ctrl80e
|
||||
else // MACHID_II
|
||||
^$C059 // 80 column output softswitch
|
||||
conio:clear = @a2clear80v
|
||||
conio:gotoxy = @a2gotoxy80v
|
||||
conio:textctrl = @a2ctrl80v
|
||||
conio:putchars = @a2putchars
|
||||
if not (flags & txt80)
|
||||
cswsave = *CSW
|
||||
kswsave = *KSW
|
||||
call($C300, 0, 0, 0, 0)
|
||||
if MACHID & $C0 == MACHID_IIE
|
||||
conio:clear = @a2clear80e
|
||||
conio:gotoxy = @a2gotoxy80e
|
||||
conio:textctrl = @a2ctrl80e
|
||||
else // MACHID_II
|
||||
^$C059 // 80 column output softswitch
|
||||
conio:clear = @a2clear80v
|
||||
conio:gotoxy = @a2gotoxy80v
|
||||
conio:textctrl = @a2ctrl80v
|
||||
conio:putchars = @a2putchars
|
||||
fin
|
||||
flags = flags | txt80
|
||||
fin
|
||||
flags = flags | txt80
|
||||
else
|
||||
if flags & txt80
|
||||
if MACHID & $C0 == MACHID_IIE
|
||||
cout(21)
|
||||
else // Videx disable
|
||||
^$C058 // 80 column output softswitch
|
||||
^$C058 // 40 column output softswitch
|
||||
*CSW = cswsave
|
||||
*KSW = kswsave
|
||||
a2viewport(0, 0, 40, 24)
|
||||
@@ -980,4 +982,4 @@ if cmdsys:_sysflags_ & vid80col; conio:textmode(80); fin
|
||||
// Keep module in memory
|
||||
//
|
||||
return modkeep
|
||||
done
|
||||
done
|
||||
|
||||
+19
-49
@@ -4,38 +4,52 @@ include "inc/cmdsys.plh"
|
||||
//
|
||||
export asm waitVBL#1
|
||||
!SOURCE "vmsrc/plvmzp.inc"
|
||||
LDA #$00
|
||||
STA TMPH
|
||||
STA TMPL
|
||||
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
|
||||
- INC TMPL
|
||||
BNE +
|
||||
INC TMPH
|
||||
+ 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
|
||||
LDA TMPL ; Return count
|
||||
STA ESTKL,X
|
||||
LDA TMPH
|
||||
STA ESTKH,X
|
||||
RTS
|
||||
end
|
||||
asm _vbl2e#1
|
||||
LDA #$00
|
||||
STA TMPH
|
||||
STA TMPL
|
||||
- LDA $C019 ; //e version
|
||||
BPL -
|
||||
- LDA $C019 ; Wait during active video
|
||||
- INC TMPL
|
||||
BNE +
|
||||
INC TMPH
|
||||
+ LDA $C019 ; Wait during active video
|
||||
BMI -
|
||||
LDA #$FF ; Return TRUE
|
||||
DEX
|
||||
LDA TMPL ; Return count
|
||||
STA ESTKL,X
|
||||
LDA TMPH
|
||||
STA ESTKH,X
|
||||
RTS
|
||||
end
|
||||
asm _vblnop#1
|
||||
LDA #$AA ; NOP version
|
||||
LDA #$00 ; NOP version
|
||||
DEX ; return FALSE
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
@@ -43,57 +57,13 @@ asm _vblnop#1
|
||||
end
|
||||
asm _vblend#1
|
||||
end
|
||||
export asm statusVBL#1
|
||||
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 = VBL int enebaled
|
||||
STA $C05B ; Enable VBL int
|
||||
LDY #$00
|
||||
BIT $C019
|
||||
BPL + ; Check for VBL
|
||||
DEY
|
||||
STA $C070 ; Reset VBL int on //c
|
||||
+ ASL
|
||||
BCS +
|
||||
STA $C05A ; Disable VBL int on //c
|
||||
+ STA $C07E ; Disable IOU access on //c
|
||||
PLP
|
||||
TYA
|
||||
DEX
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
RTS
|
||||
end
|
||||
asm _stat2e#1
|
||||
LDA #$00 ; //e version
|
||||
BIT $C019 ; Check for VBL
|
||||
BPL +
|
||||
LDA #$FF
|
||||
+ DEX
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
RTS
|
||||
end
|
||||
asm _statnop#1
|
||||
LDA #$AA ; NOP version
|
||||
DEX ; return UNIMPL
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
RTS
|
||||
end
|
||||
asm _statend#1
|
||||
end
|
||||
//
|
||||
// Check for machine specific VLB handling
|
||||
//
|
||||
memcpy(@statusVBL, @_stat2e, @_statnop-@_stat2e)
|
||||
if MACHID & MACHID_MODEL == MACHID_IIE
|
||||
memcpy(@waitVBL, @_vbl2e, @_vblnop-@_vbl2e)
|
||||
memcpy(@statusVBL, @_stat2e, @_statnop-@_stat2e)
|
||||
elsif MACHID & MACHID_MODEL <> MACHID_IIC
|
||||
memcpy(@waitVBL, @_vblnop, @_vblend-@_vblnop)
|
||||
memcpy(@statusVBL, @_statnop, @_statend-@_statnop)
|
||||
fin
|
||||
//
|
||||
// Keep module in memory
|
||||
|
||||
+4
-9
@@ -1316,6 +1316,7 @@ def editmode#0
|
||||
if not (flags & exit)
|
||||
conio:textctrl(ctrlecho, OFF)
|
||||
conio:textctrl(ctrlcursor, OFF)
|
||||
conio:clear(cls)
|
||||
drawscrn
|
||||
fin
|
||||
wend
|
||||
@@ -1532,15 +1533,8 @@ if ^arg
|
||||
cursrow = strtonum(arg)
|
||||
fin
|
||||
fin
|
||||
if statusVBL <> VBLUNIMPL
|
||||
cursflash = 0
|
||||
while statusVBL
|
||||
loop
|
||||
while not statusVBL and cursflash < 1000
|
||||
cursflash++
|
||||
loop
|
||||
cursflash = cursflash * 30 // Make it flash a little slower
|
||||
fin
|
||||
cursflash = waitVBL
|
||||
if cursflash == 0; cursflash = 300; fin
|
||||
flags = flags | insmode | gutter
|
||||
scrnwidth = conio:textmode(scrnwidth)
|
||||
inittxtbuf
|
||||
@@ -1550,6 +1544,7 @@ if cursrow
|
||||
curshpos(0)
|
||||
cursvpos(cursrow - 1)
|
||||
fin
|
||||
conio:clear(cls)
|
||||
drawscrn
|
||||
editmode
|
||||
conio:textmode(0) // Set default mode
|
||||
|
||||
Reference in New Issue
Block a user