mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-02-23 09:29:00 +00:00
Lots of progress toward freeing up up.
This commit is contained in:
parent
297d0a4c4a
commit
6c9515b63c
@ -29,8 +29,8 @@ MAX_SEGS = 96
|
||||
|
||||
DO_COMP_CHECKSUMS = 0 ; during compression debugging
|
||||
DEBUG_DECOMP = 0
|
||||
DEBUG = 1
|
||||
SANITY_CHECK = 1 ; also prints out request data
|
||||
DEBUG = 0
|
||||
SANITY_CHECK = 0 ; also prints out request data
|
||||
|
||||
; Zero page temporary variables
|
||||
tmp = $2 ; len 2
|
||||
@ -78,11 +78,11 @@ prodosMemMap = $BF58
|
||||
; Relocate all the pieces to their correct locations and perform patching.
|
||||
relocate:
|
||||
; put something interesting on the screen :)
|
||||
jsr home
|
||||
jsr ROM_home
|
||||
ldy #0
|
||||
- lda .welcomeText,y
|
||||
beq +
|
||||
jsr cout
|
||||
jsr ROM_cout
|
||||
iny
|
||||
bne -
|
||||
jmp +
|
||||
@ -175,18 +175,23 @@ relocate:
|
||||
iny
|
||||
bne .st2
|
||||
inx
|
||||
cpx #$F8
|
||||
bne .clrlup
|
||||
; it's very convenient to have the monitor in the LC for debugging
|
||||
; Copy the vectors
|
||||
ldx #6
|
||||
bit setLcWr+lcBank1 ; read from ROM, write to LC RAM
|
||||
.cpmon stx .ld3+2
|
||||
stx .st3+2
|
||||
.ld3 lda $F800,Y
|
||||
.st3 sta $F800,Y
|
||||
iny
|
||||
bne .ld3
|
||||
inx
|
||||
bne .cpmon
|
||||
- lda $FFFA,x
|
||||
sta $FFFA,x
|
||||
dex
|
||||
bpl -
|
||||
; set up a BRK/IRQ vector in low mem
|
||||
lda $FFFE
|
||||
sta _jbrk+1
|
||||
lda $FFFF
|
||||
sta _jbrk+2
|
||||
lda #<brkHandler
|
||||
sta $FFFE
|
||||
lda #>brkHandler
|
||||
sta $FFFF
|
||||
; Place the bulk of the memory manager code into the newly cleared LC
|
||||
ldx #>hiMemBegin
|
||||
.cpmm stx .ld4+2
|
||||
@ -203,7 +208,6 @@ relocate:
|
||||
bcc +
|
||||
+internalErr 'N' ; mem mgr got too big!
|
||||
+
|
||||
|
||||
; fall through into init...
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
@ -262,9 +266,9 @@ init: !zone
|
||||
lda #1
|
||||
sta scanStart+1
|
||||
; make reset go to monitor
|
||||
lda #<monitor
|
||||
lda #<goToMonitor
|
||||
sta resetVec
|
||||
lda #>monitor
|
||||
lda #>goToMonitor
|
||||
sta resetVec+1
|
||||
eor #$A5
|
||||
sta resetVec+2
|
||||
@ -397,6 +401,9 @@ loMemBegin: !pseudopc $800 {
|
||||
; Vectors for debug macros
|
||||
jmp __iosaveROM
|
||||
jmp __iorestLC
|
||||
jmp __safeCout
|
||||
jmp __safePrbyte
|
||||
jmp __safeHome
|
||||
jmp __writeStr
|
||||
jmp __prByte
|
||||
jmp __prSpace
|
||||
@ -407,6 +414,8 @@ loMemBegin: !pseudopc $800 {
|
||||
jmp __crout
|
||||
jmp __waitKey
|
||||
jmp __internalErr
|
||||
_fixedRTS:
|
||||
rts ; fixed place to find RTS, for setting V flag
|
||||
|
||||
j_main_dispatch:
|
||||
bit setLcRW+lcBank1 ; switch in mem mgr
|
||||
@ -439,21 +448,22 @@ inlineFatal:
|
||||
fatalError: !zone
|
||||
sty pTmp+1 ; save message ptr hi...
|
||||
stx pTmp ; ...and lo
|
||||
jsr setnorm ; set up text mode and vectors
|
||||
jsr saveLCState
|
||||
jsr ROM_setnorm ; set up text mode and vectors
|
||||
bit setText
|
||||
bit page1
|
||||
jsr setvid
|
||||
jsr setkbd
|
||||
jsr ROM_setvid
|
||||
jsr ROM_setkbd
|
||||
lda $24 ; check if we're already at start of screen line
|
||||
beq + ; no, no need for CR
|
||||
jsr crout ; carriage return to get to start of screen line
|
||||
jsr ROM_crout ; carriage return to get to start of screen line
|
||||
+ ldy #40 ; set up to print 40 dashes
|
||||
lda #'-'
|
||||
.dash: jsr cout
|
||||
.dash: jsr ROM_cout
|
||||
dey
|
||||
bne .dash
|
||||
jsr restLCState
|
||||
+prStr : !text "FATAL ERROR: ",0
|
||||
|
||||
ldx #$FF ; for asm str, max length
|
||||
lda (pTmp),y ; first byte (Y ends at 0 in loop above)
|
||||
bmi .msg ; if hi bit, it's a zero-terminated asm string
|
||||
@ -462,11 +472,12 @@ fatalError: !zone
|
||||
.msg lda (pTmp),y
|
||||
beq .done
|
||||
ora #$80 ; set hi bit of PLASMA strings for cout
|
||||
jsr cout
|
||||
+safeCout
|
||||
iny
|
||||
dex
|
||||
bne .msg
|
||||
.done: jsr bell
|
||||
.done: bit setROM
|
||||
jsr ROM_bell
|
||||
.hang: jmp .hang ; loop forever
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
@ -527,6 +538,25 @@ exitProDOS: !zone
|
||||
; manager lives, and it's the only code that calls ProDOS.
|
||||
rti ; RTI pops P-reg and *exact* return addr (not adding 1)
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; BRK and IRQ handler: switch to ROM, call default handler, switch back
|
||||
brkHandler:
|
||||
sta $45 ; preserve A reg
|
||||
pla ; retrieve saved P reg
|
||||
pha
|
||||
and #$10 ; check for BRK bit
|
||||
beq _jbrk ; if not brk, handle without bank switch
|
||||
bit setROM ; for BRK, do bank switch
|
||||
bit $c051 ; also switch to text screen 1
|
||||
bit $c054
|
||||
_jbrk jmp $1111 ; self-modified by init
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; On reset, jump to monitor (in ROM)
|
||||
goToMonitor:
|
||||
bit setROM
|
||||
jmp ROM_monitor
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Utility routine for convenient assembly routines in PLASMA code.
|
||||
; Params: Y=number of parameters passed from PLASMA routine
|
||||
@ -589,6 +619,11 @@ frameChk:
|
||||
; Save registers and also the state of the language card switches, then switch
|
||||
; to ROM.
|
||||
__iosaveROM: !zone {
|
||||
jsr saveLCState
|
||||
jmp ROM_iosave
|
||||
}
|
||||
|
||||
saveLCState: !zone {
|
||||
php
|
||||
pha
|
||||
lda rdLCBnk2
|
||||
@ -596,29 +631,25 @@ __iosaveROM: !zone {
|
||||
bit setROM
|
||||
pla
|
||||
plp
|
||||
jmp iosave
|
||||
}
|
||||
|
||||
; Restore registers and also the state of the language card switches.
|
||||
__iorestLC: !zone {
|
||||
jsr iorest
|
||||
php
|
||||
jsr restLCState
|
||||
plp
|
||||
rts
|
||||
}
|
||||
|
||||
; Restore the state of the language card bank switch
|
||||
restLCState: !zone {
|
||||
; Restore registers and also the state of the language card switches.
|
||||
__iorestLC:
|
||||
jsr ROM_iorest
|
||||
; fall through to restLCState
|
||||
restLCState: ; Restore the state of the language card bank switch
|
||||
php
|
||||
bit savedLCBnk2State
|
||||
bmi +
|
||||
bit setLcRW+lcBank1
|
||||
bit setLcRW+lcBank1
|
||||
plp
|
||||
rts
|
||||
+ bit setLcRW+lcBank2
|
||||
bit setLcRW+lcBank2
|
||||
plp
|
||||
rts
|
||||
}
|
||||
|
||||
; Fetch a byte pointed to by the first entry on the stack, and advance that entry.
|
||||
; Does LC switching to be sure to get the byte from the correct bank (if it happens
|
||||
@ -646,10 +677,10 @@ __writeStr: !zone {
|
||||
tsx
|
||||
.loop: jsr _getStackByte
|
||||
beq .done
|
||||
jsr cout
|
||||
jsr ROM_cout
|
||||
cmp #$AE ; "."
|
||||
bne .loop
|
||||
jsr crout
|
||||
jsr ROM_crout
|
||||
jmp .loop
|
||||
.done: jmp __iorestLC
|
||||
}
|
||||
@ -667,10 +698,23 @@ _prShared: !zone {
|
||||
jsr _getStackByte
|
||||
sta .ld+2
|
||||
.ld: lda $2000,y
|
||||
jsr prbyte
|
||||
jsr ROM_prbyte ; not safePrbyte, because we already switched to ROM
|
||||
dey
|
||||
bpl .ld
|
||||
+prSpace
|
||||
lda #$A0
|
||||
jsr ROM_cout ; not safeCout, because we already switched to ROM
|
||||
jmp __iorestLC
|
||||
}
|
||||
|
||||
__safeCout: !zone {
|
||||
jsr saveLCState
|
||||
jsr ROM_cout
|
||||
jmp restLCState
|
||||
}
|
||||
|
||||
safePrhex: !zone {
|
||||
jsr __iosaveROM
|
||||
jsr ROM_prhex
|
||||
jmp __iorestLC
|
||||
}
|
||||
|
||||
@ -678,7 +722,7 @@ __prSpace: !zone {
|
||||
php
|
||||
pha
|
||||
lda #$A0
|
||||
jsr cout
|
||||
jsr __safeCout
|
||||
pla
|
||||
plp
|
||||
rts
|
||||
@ -690,48 +734,45 @@ __prWord: !zone {
|
||||
bne _prShared ; always taken
|
||||
}
|
||||
|
||||
__prA: !zone {
|
||||
php
|
||||
pha
|
||||
jsr prbyte
|
||||
pla
|
||||
plp
|
||||
rts
|
||||
}
|
||||
__safePrbyte:
|
||||
jsr saveLCState
|
||||
jsr ROM_prbyte
|
||||
jmp restLCState
|
||||
|
||||
__prX: !zone {
|
||||
php
|
||||
pha
|
||||
txa
|
||||
jsr prbyte
|
||||
pla
|
||||
plp
|
||||
rts
|
||||
}
|
||||
__safeHome:
|
||||
jsr saveLCState
|
||||
jsr ROM_home
|
||||
jmp restLCState
|
||||
|
||||
__prY: !zone {
|
||||
php
|
||||
pha
|
||||
tya
|
||||
jsr prbyte
|
||||
pla
|
||||
plp
|
||||
rts
|
||||
}
|
||||
__prA: jsr __iosaveROM
|
||||
lda $45 ; A reg stored here
|
||||
pr_AXY_shared:
|
||||
jsr ROM_prbyte
|
||||
jmp __iorestLC
|
||||
|
||||
__prX:
|
||||
jsr __iosaveROM
|
||||
lda $46 ; X reg stored here
|
||||
jmp pr_AXY_shared
|
||||
|
||||
__prY:
|
||||
jsr __iosaveROM
|
||||
lda $47 ; y reg stored here
|
||||
jmp pr_AXY_shared
|
||||
|
||||
__crout: !zone {
|
||||
php
|
||||
pha
|
||||
jsr crout
|
||||
pla
|
||||
plp
|
||||
rts
|
||||
jsr __iosaveROM
|
||||
jsr ROM_crout
|
||||
jmp __iorestLC
|
||||
}
|
||||
|
||||
__waitKey: !zone {
|
||||
jsr __iosaveROM
|
||||
jsr rdkey
|
||||
jmp __iorestLC
|
||||
jsr ROM_rdkey
|
||||
pha
|
||||
jsr __iorestLC
|
||||
pla
|
||||
rts
|
||||
}
|
||||
|
||||
; Support for very compact abort in the case of internal errors. Prints
|
||||
@ -740,7 +781,7 @@ __internalErr: !zone {
|
||||
+prStr : !text $8D,"err=",0
|
||||
tsx
|
||||
jsr _getStackByte
|
||||
jsr cout
|
||||
jsr __safeCout
|
||||
jsr inlineFatal : !text "Internal",0
|
||||
}
|
||||
|
||||
@ -906,6 +947,12 @@ retPSrc:
|
||||
heapIntern: !zone
|
||||
stx pTmp
|
||||
sty pTmp+1
|
||||
|
||||
; FOO
|
||||
lda #$60
|
||||
sta tmp
|
||||
jsr tmp
|
||||
|
||||
jsr startHeapScan
|
||||
bcs .notfnd ; handle case of empty heap
|
||||
.blklup bvs .nxtblk
|
||||
@ -1041,9 +1088,7 @@ heapCheck: !zone
|
||||
} ; if DEBUG
|
||||
|
||||
heapCorrupt:
|
||||
ldx pTmp
|
||||
lda pTmp+1
|
||||
jsr prntax
|
||||
+prWord pTmp
|
||||
jsr inlineFatal : !text "HeapCorrupt",0
|
||||
|
||||
; Begin a heap scan by setting pTmp to start-of-heap, then returns
|
||||
@ -1091,7 +1136,7 @@ getHeapBlk:
|
||||
tax
|
||||
cpx nTypes
|
||||
bcs heapCorrupt
|
||||
bit monrts ; set V flag
|
||||
bit fixedRTS ; set V flag
|
||||
lda typeLen,x
|
||||
bvs .gotlen ; always taken
|
||||
|
||||
@ -1112,7 +1157,7 @@ gc1_mark: !zone
|
||||
bvc .start
|
||||
; Phase 3 of Garbage Collection: fix all pointers
|
||||
gc3_fix:
|
||||
bit monrts ; set V flag to mark phase 3
|
||||
bit fixedRTS ; set V flag to mark phase 3
|
||||
.start lda #0
|
||||
sta resNum ; initialize block counter (note: blk #0 in hash is not used)
|
||||
.outer inc resNum ; advance to next block in hash
|
||||
@ -1488,7 +1533,7 @@ saneEnd: !zone {
|
||||
printMem: !zone
|
||||
lda $24 ; check if we're already at start of screen line
|
||||
beq + ; no, no need for CR
|
||||
jsr crout ; carriage return to get to start of screen line
|
||||
+crout
|
||||
+ lda isAuxCmd
|
||||
bne aux_printMem
|
||||
main_printMem:
|
||||
@ -1504,15 +1549,15 @@ aux_printMem:
|
||||
dex
|
||||
bne -
|
||||
lda #'$'
|
||||
jsr cout
|
||||
+safeCout
|
||||
lda tSegAdrHi,y
|
||||
jsr prbyte
|
||||
+safePrbyte
|
||||
lda tSegAdrLo,y
|
||||
jsr prbyte
|
||||
+safePrbyte
|
||||
lda #','
|
||||
jsr cout
|
||||
+safeCout
|
||||
lda #'L'
|
||||
jsr cout
|
||||
+safeCout
|
||||
lda tSegLink,y
|
||||
tax
|
||||
lda tSegAdrLo,x
|
||||
@ -1521,9 +1566,9 @@ aux_printMem:
|
||||
pha
|
||||
lda tSegAdrHi,x
|
||||
sbc tSegAdrHi,y
|
||||
jsr prbyte
|
||||
+safePrbyte
|
||||
pla
|
||||
jsr prbyte
|
||||
+safePrbyte
|
||||
lda tSegType,y
|
||||
tax
|
||||
and #$40
|
||||
@ -1534,15 +1579,15 @@ aux_printMem:
|
||||
cpx #0
|
||||
bmi ++
|
||||
lda #'-'
|
||||
++ jsr cout
|
||||
++ +safeCout
|
||||
txa
|
||||
and #$F
|
||||
tax
|
||||
jsr prhex
|
||||
jsr safePrhex
|
||||
txa
|
||||
beq +
|
||||
lda #':'
|
||||
jsr cout
|
||||
+safeCout
|
||||
lda tSegRes,y
|
||||
+prA
|
||||
jmp .next
|
||||
@ -1555,7 +1600,8 @@ aux_printMem:
|
||||
tay
|
||||
beq +
|
||||
jmp .printSegs
|
||||
+ jmp crout
|
||||
+ +crout
|
||||
rts
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
reset: !zone
|
||||
@ -2049,15 +2095,15 @@ openPartition: !zone
|
||||
sta readAddr
|
||||
jmp readToMain ; finish by reading the rest of the header
|
||||
; ask user to insert the disk
|
||||
.insert jsr home
|
||||
.insert +safeHome
|
||||
+prStr : !text "Insert disk ",0
|
||||
bit $c051
|
||||
lda curPartition
|
||||
clc
|
||||
adc #"0"
|
||||
jsr cout
|
||||
jsr rdkey
|
||||
jsr home
|
||||
+safeCout
|
||||
+waitKey
|
||||
+safeHome
|
||||
bit $c050
|
||||
jmp .open ; try again
|
||||
.fileStr !raw "/GAME.PART.1",0 ; 'raw' chars to get lo-bit ascii that ProDOS likes.
|
||||
@ -2296,18 +2342,16 @@ disk_finishLoad: !zone
|
||||
.debug1:+prStr : !text "Ld t=",0
|
||||
pha
|
||||
lda resType
|
||||
jsr prhex
|
||||
lda #" "
|
||||
jsr cout
|
||||
jsr safePrhex
|
||||
+prSpace
|
||||
pla
|
||||
+prStr : !text "n=",0
|
||||
+prByte resNum
|
||||
+prStr : !text "aux=",0
|
||||
pha
|
||||
lda isAuxCmd
|
||||
jsr prhex
|
||||
lda #" "
|
||||
jsr cout
|
||||
jsr safePrhex
|
||||
+prSpace
|
||||
pla
|
||||
rts
|
||||
.debug2:+prStr : !text "rawLen=",0
|
||||
|
@ -96,24 +96,24 @@ setLcRW = $C083
|
||||
lcBank2 = 0
|
||||
lcBank1 = 8
|
||||
|
||||
; ROM routines
|
||||
prntax = $F941
|
||||
textinit = $FB2F
|
||||
home = $FC58
|
||||
rdkey = $FD0C
|
||||
getln1 = $FD6F
|
||||
crout = $FD8E
|
||||
prbyte = $FDDA
|
||||
prhex = $FDE3
|
||||
cout = $FDED
|
||||
setnorm = $FE84
|
||||
setkbd = $FE89
|
||||
setvid = $FE93
|
||||
prerr = $FF2D
|
||||
bell = $FF3A
|
||||
iosave = $FF4A
|
||||
iorest = $FF3F
|
||||
monrts = $FF58
|
||||
monitor = $FF69
|
||||
getnum = $FFA7
|
||||
; ROM routines (call with care after switching to ROM bank)
|
||||
ROM_prntax = $F941
|
||||
ROM_textinit = $FB2F
|
||||
ROM_home = $FC58
|
||||
ROM_rdkey = $FD0C
|
||||
ROM_getln1 = $FD6F
|
||||
ROM_crout = $FD8E
|
||||
ROM_prbyte = $FDDA
|
||||
ROM_prhex = $FDE3
|
||||
ROM_cout = $FDED
|
||||
ROM_setnorm = $FE84
|
||||
ROM_setkbd = $FE89
|
||||
ROM_setvid = $FE93
|
||||
ROM_prerr = $FF2D
|
||||
ROM_bell = $FF3A
|
||||
ROM_iosave = $FF4A
|
||||
ROM_iorest = $FF3F
|
||||
ROM_monrts = $FF58
|
||||
ROM_monitor = $FF69
|
||||
ROM_getnum = $FFA7
|
||||
|
||||
|
@ -400,7 +400,10 @@ _asmPlasm_bank2 = _asmPlasm+3
|
||||
; Debug support routines (defined in core/mem.s)
|
||||
_iosaveROM = _asmPlasm_bank2+3
|
||||
_iorestLC = _iosaveROM+3
|
||||
_writeStr = _iorestLC+3
|
||||
_safeCout = _iorestLC+3
|
||||
_safePrbyte = _safeCout+3
|
||||
_safeHome = _safePrbyte+3
|
||||
_writeStr = _safeHome+3
|
||||
_prByte = _writeStr+3
|
||||
_prSpace = _prByte+3
|
||||
_prWord = _prSpace+3
|
||||
@ -410,6 +413,7 @@ _prY = _prX+3
|
||||
_crout = _prY+3
|
||||
_waitKey = _crout+3
|
||||
_internalErr = _waitKey+3
|
||||
fixedRTS = _internalErr+3
|
||||
|
||||
; Debug macros
|
||||
!macro iosaveROM {
|
||||
@ -420,6 +424,18 @@ _internalErr = _waitKey+3
|
||||
jsr _iorestLC
|
||||
}
|
||||
|
||||
!macro safeCout {
|
||||
jsr _safeCout
|
||||
}
|
||||
|
||||
!macro safePrbyte {
|
||||
jsr _safeCout
|
||||
}
|
||||
|
||||
!macro safeHome {
|
||||
jsr _safeHome
|
||||
}
|
||||
|
||||
!macro prStr {
|
||||
jsr _writeStr
|
||||
}
|
||||
|
@ -149,7 +149,8 @@ end
|
||||
// Params: None
|
||||
asm home
|
||||
+asmPlasm 0
|
||||
jmp home
|
||||
+safeHome
|
||||
rts
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -270,8 +270,11 @@ export asm finishString
|
||||
!zone {
|
||||
+asmPlasm 1
|
||||
sta tmp ; save isPlural flag
|
||||
jsr setvid ; put the cout vector back to default
|
||||
bit monrts ; V flag for prev-is-punctuation
|
||||
lda #$F0 ; put the cout vector back to default
|
||||
sta cswl
|
||||
lda #$FD
|
||||
sty cswh
|
||||
bit fixedRTS; V flag for prev-is-punctuation
|
||||
ldy #1 ; dest offset in Y
|
||||
ldx #1 ; source offset in X
|
||||
cpx inbuf
|
||||
@ -327,7 +330,7 @@ export asm finishString
|
||||
bcc +
|
||||
clv ; clear last-is-punc flag
|
||||
bvc .store ; always taken
|
||||
+ bit monrts ; set prev-is-punc flag
|
||||
+ bit fixedRTS; set prev-is-punc flag
|
||||
sty tmp+1 ; save dest offset of last punctuation
|
||||
|
||||
.store
|
||||
@ -489,7 +492,7 @@ export asm puts
|
||||
iny
|
||||
- lda (pTmp),y
|
||||
ora #$80
|
||||
jsr cout
|
||||
+safeCout
|
||||
iny
|
||||
dex
|
||||
bne -
|
||||
@ -500,7 +503,9 @@ end
|
||||
// Get a character from the keyboard
|
||||
export asm rdkey
|
||||
+asmPlasm 0
|
||||
jmp rdkey
|
||||
+waitKey
|
||||
ldy #0
|
||||
rts
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -526,7 +531,7 @@ asm partialPrintf
|
||||
ora #$80
|
||||
cmp #'%' ; stop if we hit % code
|
||||
beq +
|
||||
jsr cout
|
||||
+safeCout
|
||||
iny
|
||||
dec tmp ; otherwise go until end of string
|
||||
bne -
|
||||
@ -545,9 +550,8 @@ end
|
||||
// Print a 16-bit hex value
|
||||
asm printHex
|
||||
+asmPlasm 1
|
||||
tax
|
||||
tya
|
||||
jmp prntax
|
||||
+prYA
|
||||
rts
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -555,30 +559,37 @@ end
|
||||
asm printChar
|
||||
+asmPlasm 1
|
||||
ora #$80
|
||||
jmp cout
|
||||
jmp _safeCout
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Print a carriage return
|
||||
asm crout
|
||||
+asmPlasm 0
|
||||
jmp crout
|
||||
lda #$8D
|
||||
jmp _safeCout
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Ring the bell
|
||||
export asm beep
|
||||
+asmPlasm 0
|
||||
jmp bell
|
||||
+iosaveROM
|
||||
jsr ROM_bell
|
||||
jmp _iorestLC
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Read a string from the keyboard, turn it into a PLASMA string and return a pointer to the string.
|
||||
asm readStr
|
||||
+asmPlasm 0
|
||||
jsr getln1
|
||||
+iosaveROM
|
||||
jsr ROM_getln1
|
||||
txa
|
||||
pha
|
||||
+iorestLC
|
||||
pla
|
||||
pha
|
||||
beq +
|
||||
- lda inbuf-1,x
|
||||
and #$7F
|
||||
@ -670,20 +681,6 @@ export asm brk
|
||||
brk
|
||||
end
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Clear the screen and reboot the machine
|
||||
// Params: None
|
||||
export asm reboot
|
||||
bit setROM
|
||||
jsr home
|
||||
bit setText
|
||||
bit page1
|
||||
inc $3F4 ; invalidate reset vector
|
||||
jmp $FA62 ; and reset
|
||||
end
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Set up the font engine
|
||||
// Params: pFont
|
||||
|
Loading…
x
Reference in New Issue
Block a user