Timer working on IIgs! asmSlam optimized a bit.

This commit is contained in:
Scott Duensing 2018-10-15 21:04:13 -05:00
parent 4aa716b19f
commit e951e9a8b7
4 changed files with 41 additions and 80 deletions

View file

@ -16,7 +16,7 @@ iix makelib 31:/out/joey/joeylib +31:/out/joey/jIIgsc.a
iix makelib 31:/out/joey/joeylib +31:/out/joey/joey.a iix makelib 31:/out/joey/joeylib +31:/out/joey/joey.a
iix compile test.c keep=31:/out/joey/test iix compile test.c keep=31:/out/joey/test
iix -DKeepType=S16 link 31:/out/joey/test 31:/out/joey/joeylib keep=31:/out/joey/test iix -DKeepType=S16 link +L 31:/out/joey/test 31:/out/joey/joeylib keep=31:/out/joey/test > test.map
iix dumpobj +D 31:/out/joey/test &> test.dis || true iix dumpobj +D 31:/out/joey/test &> test.dis || true

View file

@ -43,3 +43,5 @@ SDL_MIXER_LIBS = \
LIBS += \ LIBS += \
$$SDL_LIBS \ $$SDL_LIBS \
$$SDL_MIXER_LIBS $$SDL_MIXER_LIBS
DISTFILES +=

View file

@ -29,10 +29,6 @@ savedDBR data ; Storage for Data Bank Register
ds 2 ; 16 bits ds 2 ; 16 bits
end ; Used by jIIgs.macro end ; Used by jIIgs.macro
vblDBR data ; Storage for Data Bank Register during VBL Interrupt
ds 2 ; 16 bits
end
ScanTable data ScanTable data
ds 400 ; 400 bytes for scanline offsets ds 400 ; 400 bytes for scanline offsets
end end
@ -392,32 +388,6 @@ PBoth sta temp3 ; Store accumulator in temp3
jreturn jreturn
end end
;----------------------------------------
; Turn SHR Shadowing Off
;----------------------------------------
asmShOff start
jsubroutine
short m
lda $E0C035
ora #$08
sta $E0C035
long m
jreturn
end
;----------------------------------------
; Turn SHR Shadowing On
;----------------------------------------
asmShOn start
jsubroutine
short m
lda $E0C035
and #$F7
sta $E0C035
long m
jreturn
end
;---------------------------------------- ;----------------------------------------
; "PEI Slam" shadowed SHR display to the ; "PEI Slam" shadowed SHR display to the
; actual display. Copies all 200 lines, ; actual display. Copies all 200 lines,
@ -429,17 +399,23 @@ asmSlam start
jsubroutine jsubroutine
short m ; Turn Shadowing On
lda $E0C035
and #$F7
sta $E0C035
long m
php ; Push Processor Status Register php ; Push Processor Status Register
tdc ; Transfer Direct Register to C Accumulator lda >$E0C068-1
sta >DataPtr ; Store Accumulator in DataPtr pha ; Save main/aux bank state
phd ; Save DPage
tsc ; Transfer Stack Pointer to C Accumulator tsc ; Transfer Stack Pointer to C Accumulator
sta >StackPtr ; Store Accumulator in StackPtr sta >StackPtr ; Store Accumulator in StackPtr
sei ; Disable interrupts sei ; Disable interrupts
short m
sta >$00C005 ; Switch to AUX lda #$3000 ; Read/write aux 48k (SHR) via bank 0
sta >$00C003 sta >$E0C068-1
long m
ldy #$2000 ; Point to start of SHR ldy #$2000 ; Point to start of SHR
@ -601,41 +577,39 @@ peiPage tya
brl peiPage brl peiPage
peiInts short m peiInts lda #0 ; Swap main 48k into bank 0
sta >$00C004 ; Switch to MAIN sta >$E0C068-1
sta >$00C002
long m
lda >StackPtr ; Load original Stack Pointer into Accumulator lda >StackPtr ; Load original Stack Pointer into Accumulator
tcs ; Transfer Accumulator to Stack Pointer (Restores original stack) tcs ; Transfer Accumulator to Stack Pointer (Restores original stack)
lda >DataPtr ; Load original Direct Pointer into Accumulator pld ; Restore direct page
tcd ; Transfer Accumulator to Direct Pointer (Restores direct page)
cli ; Go Interrupts! Go! cli ; Go Interrupts! Go!
sei ; Stop interrupts sei ; Stop interrupts
short m phd
sta >$00C005 ; Switch to AUX lda #$3000 ; Read/write aux 48k (SHR) via bank 0
sta >$00C003 sta >$E0C068-1
long m
brl peiChunk brl peiChunk
peiEnd short m peiEnd lda #0 ; Swap main 48k into bank 0
sta >$00C004 ; Switch to MAIN sta >$E0C068-1
sta >$00C002
long m
lda >StackPtr lda >StackPtr
tcs ; Restore stack tcs ; Restore stack
lda >DataPtr pld ; Restore DP
tcd ; Restore DP pla
cli ; Enable Interrupts sta >$E0C068-1 ; Restore main/aux bank state
plp ; Restore processor register plp ; Restore processor register
short m ; Turn Shadowing Off
lda $E0C035
ora #$08
sta $E0C035
long m
jreturn jreturn
StackPtr ds 2 ; Space for SP StackPtr ds 2 ; Space for SP
DataPtr ds 2 ; Space for DP
end end
@ -667,11 +641,12 @@ STL sta ScanTable,x ; Store accumulator in ScanTable+x
lda #42 ; Reset timer lda #42 ; Reset timer
sta >VblTime sta >VblTime
;ph4 #VblHdr ; Start VBL interrupt task ph4 #VblHdr ; Start VBL interrupt task
;ldx #$1203 ;_SetHeartBeat ldx #$1203 ;_SetHeartBeat
;jsl $E10000 jsl $E10000
jreturn jreturn
jsl VblTask ; This is a dummy call to be sure there's a reference to VblTask when linking as a library.
end end
;---------------------------------------- ;----------------------------------------
@ -680,9 +655,9 @@ STL sta ScanTable,x ; Store accumulator in ScanTable+x
asmStop start asmStop start
jsubroutine jsubroutine
;ph4 #VblHdr ; Stop VBL interrupt task ph4 #VblHdr ; Stop VBL interrupt task
;ldx #$1303 ;_DelHeartBeat ldx #$1303 ;_DelHeartBeat
;jsl $E10000 jsl $E10000
jreturn jreturn
end end
@ -699,23 +674,11 @@ VblCount dc i2'1' ; How many VBLs between calls (1 only on initial call)
VblTask start VblTask start
using VblHdr using VblHdr
using VblRate using VblRate
using vblDBR lda >VblRate ; Reset hearbeat counter
long m ; 16 bit Accumulator
phb ; Push Data Bank Register
phb ; Push Data Bank Register
pla ; Pull Accumulator
sta >vblDBR ; Store Accumulator in savedDBR (Data Bank Register)
phk ; Push K (Program Bank Register)
plb ; Pull Data Bank Register
lda >VblRate ; Reset counter
sta >VblCount sta >VblCount
lda >VblTime ; Increment timer lda >VblTime ; Increment timer
inc a inc a
sta >VblTime sta >VblTime
lda >vblDBR ; Load our saved Data Bank Register
pha ; Push the C Accumulator
plb ; Pull Data Bank Register
plb ; Pull Data Bank Register
short m ; Back to 8 bit Accumulator
rtl rtl
end end

View file

@ -49,8 +49,6 @@ extern void asmBorder(int c);
extern void asmGrOff(void); extern void asmGrOff(void);
extern void asmGrOn(void); extern void asmGrOn(void);
extern int asmJoy(int which); extern int asmJoy(int which);
extern void asmShOff(void);
extern void asmShOn(void);
extern void asmSlam(void); extern void asmSlam(void);
extern void asmStart(int myID, int hertzBy10); extern void asmStart(int myID, int hertzBy10);
extern void asmStop(void); extern void asmStop(void);
@ -105,9 +103,7 @@ void _jlDebugBorder(jlBorderColorsE color) {
void jlDisplayPresent(void) { void jlDisplayPresent(void) {
asmShOn();
asmSlam(); asmSlam();
asmShOff();
asmBorder(_jlBorderColor); asmBorder(_jlBorderColor);
} }