Label-ize absolute references to Apple II I/O locations.
Fix a typo-ed reference to CLRALTCHAR to correct location.
This commit is contained in:
parent
03e263dd5b
commit
8f83ea188e
83
applecorn.s
83
applecorn.s
|
@ -34,8 +34,12 @@ A4H EQU $43
|
||||||
STRTL EQU $3ED
|
STRTL EQU $3ED
|
||||||
STRTH EQU $3EE
|
STRTH EQU $3EE
|
||||||
|
|
||||||
|
* Apple II BREAK vector
|
||||||
|
BREAKV EQU $3F0
|
||||||
|
|
||||||
* Reset vector (2 bytes + 1 byte checksum)
|
* Reset vector (2 bytes + 1 byte checksum)
|
||||||
RSTV EQU $3F2
|
RSTV EQU $3F2
|
||||||
|
PWRDUP EQU $3F4
|
||||||
|
|
||||||
* IRQ vector
|
* IRQ vector
|
||||||
A2IRQV EQU $3FE
|
A2IRQV EQU $3FE
|
||||||
|
@ -66,6 +70,55 @@ P8BMAP282F EQU $BF5D
|
||||||
P8BMAP3037 EQU $BF5E
|
P8BMAP3037 EQU $BF5E
|
||||||
P8BMAP383F EQU $BF5F
|
P8BMAP383F EQU $BF5F
|
||||||
|
|
||||||
|
*Hardware I/O locations
|
||||||
|
KEYBOARD EQU $C000
|
||||||
|
80STOREOFF EQU $C000
|
||||||
|
80STOREON EQU $C001 ; Currently not used
|
||||||
|
RDMAINRAM EQU $C002
|
||||||
|
RDCARDRAM EQU $C003
|
||||||
|
WRMAINRAM EQU $C004
|
||||||
|
WRCARDRAM EQU $C005
|
||||||
|
SETSTDZP EQU $C008
|
||||||
|
SETALTZP EQU $C009
|
||||||
|
CLR80VID EQU $C00C
|
||||||
|
SET80VID EQU $C00D
|
||||||
|
CLRALTCHAR EQU $C00E
|
||||||
|
SETALTCHAR EQU $C00F
|
||||||
|
|
||||||
|
KBDSTRB EQU $C010
|
||||||
|
RDVBL EQU $C019
|
||||||
|
RD80VID EQU $C01F
|
||||||
|
|
||||||
|
TBCOLOR EQU $C022 ; GS-specific, used but commented out
|
||||||
|
|
||||||
|
SPKR EQU $C030
|
||||||
|
CLOCKCTL EQU $C034 ; GS-specific, Clock control register
|
||||||
|
CYAREG EQU $C036 ; GS-specific, CYA Register
|
||||||
|
|
||||||
|
GRON EQU $C050
|
||||||
|
TEXTON EQU $C051
|
||||||
|
FULLGR EQU $C052
|
||||||
|
MIXGRTXT EQU $C053 ; Currently not used
|
||||||
|
PAGE1 EQU $C054
|
||||||
|
PAGE2 EQU $C055
|
||||||
|
LORES EQU $C056 ; Currently not used
|
||||||
|
HIRES EQU $C057
|
||||||
|
AN0OFF EQU $C058
|
||||||
|
AN0ON EQU $C059
|
||||||
|
AN1OFF EQU $C05A
|
||||||
|
AN1ON EQU $C05B
|
||||||
|
AN2OFF EQU $C05C
|
||||||
|
AN2ON EQU $C05D
|
||||||
|
AN3OFF EQU $C05E
|
||||||
|
AN3ON EQU $C05F
|
||||||
|
|
||||||
|
BUTTON0 EQU $C061
|
||||||
|
BUTTON1 EQU $C062
|
||||||
|
|
||||||
|
ROMIN EQU $C081
|
||||||
|
LCBANK1 EQU $C08B
|
||||||
|
|
||||||
|
|
||||||
* IO Buffer for reading file (1024 bytes)
|
* IO Buffer for reading file (1024 bytes)
|
||||||
IOBUF0 EQU $0C00 ; For loading/saving, OSFILE, *.
|
IOBUF0 EQU $0C00 ; For loading/saving, OSFILE, *.
|
||||||
IOBUF1 EQU $1000 ; Four open files for langs
|
IOBUF1 EQU $1000 ; Four open files for langs
|
||||||
|
@ -88,7 +141,7 @@ FDRAWADDR EQU $9400
|
||||||
FONTADDR EQU $A900
|
FONTADDR EQU $A900
|
||||||
|
|
||||||
* Address in aux memory where ROM will be loaded
|
* Address in aux memory where ROM will be loaded
|
||||||
AUXADDR EQU $8000
|
ROMAUXADDR EQU $8000
|
||||||
|
|
||||||
* Address in aux memory where the MOS shim is located
|
* Address in aux memory where the MOS shim is located
|
||||||
AUXMOS1 EQU $2000 ; Temp staging area in Aux
|
AUXMOS1 EQU $2000 ; Temp staging area in Aux
|
||||||
|
@ -99,8 +152,8 @@ AUXMOS EQU $D000 ; Final location in aux LC
|
||||||
* routine in aux memory
|
* routine in aux memory
|
||||||
XF2AUX MAC
|
XF2AUX MAC
|
||||||
SEI ; Disable IRQ before XFER
|
SEI ; Disable IRQ before XFER
|
||||||
LDX $C08B ; R/W LC RAM, bank 1
|
LDX LCBANK1 ; R/W LC RAM, bank 1
|
||||||
LDX $C08B
|
LDX LCBANK1
|
||||||
LDX #<]1
|
LDX #<]1
|
||||||
STX STRTL
|
STX STRTL
|
||||||
LDX #>]1
|
LDX #>]1
|
||||||
|
@ -146,8 +199,8 @@ ENTAUX MAC
|
||||||
* Careful: This enables IRQ - not for use in ISR
|
* Careful: This enables IRQ - not for use in ISR
|
||||||
ENTMAIN MAC
|
ENTMAIN MAC
|
||||||
TXS ; Main SP already in X
|
TXS ; Main SP already in X
|
||||||
LDX $C081 ; Bank in ROM
|
LDX ROMIN ; Bank in ROM
|
||||||
LDX $C081
|
LDX ROMIN
|
||||||
CLI ; Re-enable IRQ after XFER
|
CLI ; Re-enable IRQ after XFER
|
||||||
EOM
|
EOM
|
||||||
|
|
||||||
|
@ -166,20 +219,20 @@ IENTAUX MAC
|
||||||
* For use in interrupt handlers (no CLI!)
|
* For use in interrupt handlers (no CLI!)
|
||||||
IENTMAIN MAC
|
IENTMAIN MAC
|
||||||
TXS ; Main SP already in X
|
TXS ; Main SP already in X
|
||||||
LDX $C081 ; Bank in ROM
|
LDX ROMIN ; Bank in ROM
|
||||||
LDX $C081
|
LDX ROMIN
|
||||||
EOM
|
EOM
|
||||||
|
|
||||||
* Enable writing to main memory (for code running in aux)
|
* Enable writing to main memory (for code running in aux)
|
||||||
WRTMAIN MAC
|
WRTMAIN MAC
|
||||||
PHP
|
PHP
|
||||||
SEI ; Keeps IRQ handler easy
|
SEI ; Keeps IRQ handler easy
|
||||||
STA $C004 ; Write to main memory
|
STA WRMAINRAM ; Write to main memory
|
||||||
EOM
|
EOM
|
||||||
|
|
||||||
* Go back to writing to aux (for code running in aux)
|
* Go back to writing to aux (for code running in aux)
|
||||||
WRTAUX MAC
|
WRTAUX MAC
|
||||||
STA $C005 ; Write to aux memory
|
STA WRCARDRAM ; Write to aux memory
|
||||||
PLP ; Normal service resumed
|
PLP ; Normal service resumed
|
||||||
EOM
|
EOM
|
||||||
|
|
||||||
|
@ -187,16 +240,16 @@ WRTAUX MAC
|
||||||
ALTZP MAC
|
ALTZP MAC
|
||||||
PHP
|
PHP
|
||||||
SEI ; Disable IRQ when AltZP on
|
SEI ; Disable IRQ when AltZP on
|
||||||
LDA $C08B ; R/W LC bank 1
|
LDA LCBANK1 ; R/W LC bank 1
|
||||||
LDA $C08B
|
LDA LCBANK1
|
||||||
STA $C009 ; Alt ZP and LC
|
STA SETALTZP ; Alt ZP and LC
|
||||||
EOM
|
EOM
|
||||||
|
|
||||||
* Manually disable AltZP (for code running in main)
|
* Manually disable AltZP (for code running in main)
|
||||||
MAINZP MAC
|
MAINZP MAC
|
||||||
STA $C008 ; Main ZP and LC
|
STA SETSTDZP ; Main ZP and LC
|
||||||
LDA $C081 ; Bank ROM back in
|
LDA ROMIN ; Bank ROM back in
|
||||||
LDA $C081
|
LDA ROMIN
|
||||||
PLP ; Turn IRQ back on
|
PLP ; Turn IRQ back on
|
||||||
EOM
|
EOM
|
||||||
|
|
||||||
|
|
|
@ -344,12 +344,13 @@ WORD05IO LDA OSINTWS+0 ; X CORRUPTED BY XF2MAIN
|
||||||
WORD05IO1 >>> XF2MAIN,MAINRDMEM
|
WORD05IO1 >>> XF2MAIN,MAINRDMEM
|
||||||
|
|
||||||
* <8000xxxx language memory
|
* <8000xxxx language memory
|
||||||
* ????xxxx main memory RAM paged in via STA $C002
|
* ????xxxx MAIN RAM is activated by writing to RDMAINRAM ($C002)
|
||||||
|
* AUX RAM us activated by writing to RDCARDRAM ($C003)
|
||||||
* ????xxxx main memory ROM paged in via XFER
|
* ????xxxx main memory ROM paged in via XFER
|
||||||
|
|
||||||
STA $C002 ; Switch to main memory
|
STA RDMAINRAM ; Switch to main memory
|
||||||
WORD05A LDA (OSINTWS) ; Get byte
|
WORD05A LDA (OSINTWS) ; Get byte
|
||||||
STA $C003 ; Back to aux memory
|
STA RDCARDRAM ; Back to aux memory
|
||||||
STA (OSCTRL),Y ; Store it
|
STA (OSCTRL),Y ; Store it
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,7 @@ KBDINIT LDX #DEFBYTEEND-DEFBYTE-1
|
||||||
BIT SETV
|
BIT SETV
|
||||||
JSR KBDTEST
|
JSR KBDTEST
|
||||||
BCS :KBDINITOK ; Return default MODE=0
|
BCS :KBDINITOK ; Return default MODE=0
|
||||||
STA $C010 ; Ack. keypress
|
STA KBDSTRB ; Ack. keypress
|
||||||
TAX ; Use keypress as default MODE
|
TAX ; Use keypress as default MODE
|
||||||
:KBDINITOK TXA
|
:KBDINITOK TXA
|
||||||
RTS
|
RTS
|
||||||
|
@ -169,11 +169,11 @@ INKEY5 DEX
|
||||||
INKEY6 PHY
|
INKEY6 PHY
|
||||||
*
|
*
|
||||||
* VBLK pulses at 50Hz/60Hz, toggles at 100Hz/120Hz
|
* VBLK pulses at 50Hz/60Hz, toggles at 100Hz/120Hz
|
||||||
LDX $C019 ; Get initial VBLK state
|
LDX RDVBL ; Get initial VBLK state
|
||||||
INKEY8 BIT $C000
|
INKEY8 BIT KEYBOARD
|
||||||
BMI INKEY4 ; Key pressed
|
BMI INKEY4 ; Key pressed
|
||||||
TXA
|
TXA
|
||||||
EOR $C019
|
EOR RDVBL
|
||||||
BPL INKEY8 ; Wait for VBLK change
|
BPL INKEY8 ; Wait for VBLK change
|
||||||
BMI INKEYLP ; Loop back to key test
|
BMI INKEYLP ; Loop back to key test
|
||||||
|
|
||||||
|
@ -364,15 +364,15 @@ KEYCOPY LDA FXTABCHAR ; Prepare TAB if no copy cursor
|
||||||
* Cursors -> $CC-$CF
|
* Cursors -> $CC-$CF
|
||||||
*
|
*
|
||||||
KBDREAD CLV ; VC=return keypress
|
KBDREAD CLV ; VC=return keypress
|
||||||
KBDTEST LDA $C000 ; VS here to test for keypress
|
KBDTEST LDA KEYBOARD ; VS here to test for keypress
|
||||||
EOR #$80 ; Toggle bit 7
|
EOR #$80 ; Toggle bit 7
|
||||||
CMP #$80
|
CMP #$80
|
||||||
BCS KBDDONE ; No key pressed
|
BCS KBDDONE ; No key pressed
|
||||||
BVS KBDDONE ; VS=test for keypress
|
BVS KBDDONE ; VS=test for keypress
|
||||||
STA $C010 ; Ack. keypress
|
STA KBDSTRB ; Ack. keypress
|
||||||
BIT $C061
|
BIT BUTTON0
|
||||||
BMI KBDLALT ; Left Apple pressed
|
BMI KBDLALT ; Left Apple pressed
|
||||||
BIT $C062
|
BIT BUTTON1
|
||||||
BMI KBDRALT ; Right Apple pressed
|
BMI KBDRALT ; Right Apple pressed
|
||||||
CMP #$09
|
CMP #$09
|
||||||
BEQ KBDTAB ; TAB is dual action TAB/COPY
|
BEQ KBDTAB ; TAB is dual action TAB/COPY
|
||||||
|
@ -398,10 +398,10 @@ KBDLALT CMP #$40 ; Left Apple key pressed
|
||||||
BCS KBDCHKESC ; >'9'
|
BCS KBDCHKESC ; >'9'
|
||||||
KBDFUNC AND #$0F ; Convert Apple-Num to function key
|
KBDFUNC AND #$0F ; Convert Apple-Num to function key
|
||||||
ORA #$80
|
ORA #$80
|
||||||
BIT $C062
|
BIT BUTTON1
|
||||||
BPL KBDCHKESC ; Left+Digit -> $8x
|
BPL KBDCHKESC ; Left+Digit -> $8x
|
||||||
ORA #$90 ; Right+Digit -> $9x
|
ORA #$90 ; Right+Digit -> $9x
|
||||||
BIT $C061
|
BIT BUTTON0
|
||||||
BPL KBDCHKESC
|
BPL KBDCHKESC
|
||||||
EOR #$30 ; Left+Right+Digit -> $Ax
|
EOR #$30 ; Left+Right+Digit -> $Ax
|
||||||
BRA KBDCHKESC
|
BRA KBDCHKESC
|
||||||
|
|
|
@ -32,11 +32,11 @@ MOSINIT SEI ; Disable IRQ while initializing
|
||||||
LDX #$FF ; Initialize Alt SP to $1FF
|
LDX #$FF ; Initialize Alt SP to $1FF
|
||||||
TXS
|
TXS
|
||||||
|
|
||||||
STA $C005 ; Make sure we are writing aux
|
STA WRCARDRAM ; Make sure we are writing aux
|
||||||
STA $C000 ; Make sure 80STORE is off
|
STA 80STOREOFF ; Make sure 80STORE is off
|
||||||
|
|
||||||
LDA $C08B ; LC RAM Rd/Wt, 1st 4K bank
|
LDA LCBANK1 ; LC RAM Rd/Wt, 1st 4K bank
|
||||||
LDA $C08B
|
LDA LCBANK1
|
||||||
|
|
||||||
:MODBRA BRA :RELOC ; NOPped out on first run
|
:MODBRA BRA :RELOC ; NOPped out on first run
|
||||||
BRA :NORELOC
|
BRA :NORELOC
|
||||||
|
@ -104,9 +104,9 @@ MOSINIT SEI ; Disable IRQ while initializing
|
||||||
:S7 BRA :L2
|
:S7 BRA :L2
|
||||||
|
|
||||||
:NORELOC
|
:NORELOC
|
||||||
:S8 STA $C00D ; 80 col on
|
:S8 STA SET80VID ; 80 col on
|
||||||
STA $C003 ; Alt charset off
|
STA CLRALTCHAR ; Alt charset off (?)
|
||||||
STA $C055 ; PAGE2
|
STA PAGE2 ; PAGE2
|
||||||
JMP MOSHIGH ; Ensure executing in high memory here
|
JMP MOSHIGH ; Ensure executing in high memory here
|
||||||
|
|
||||||
MOSHIGH SEI ; Disable IRQ while initializing
|
MOSHIGH SEI ; Disable IRQ while initializing
|
||||||
|
@ -126,7 +126,7 @@ MOSHIGH SEI ; Disable IRQ while initializing
|
||||||
DEX
|
DEX
|
||||||
BPL :INITPG2
|
BPL :INITPG2
|
||||||
|
|
||||||
LDA $C036 ; GS speed register
|
LDA CYAREG ; GS speed register
|
||||||
AND #$80 ; Speed bit only
|
AND #$80 ; Speed bit only
|
||||||
STA GSSPEED ; In Alt LC for IRQ/BRK hdlr
|
STA GSSPEED ; In Alt LC for IRQ/BRK hdlr
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET
|
||||||
JSR OSNEWL
|
JSR OSNEWL
|
||||||
PLP ; Get entry type back
|
PLP ; Get entry type back
|
||||||
LDA #$01
|
LDA #$01
|
||||||
JMP AUXADDR
|
JMP ROMAUXADDR
|
||||||
|
|
||||||
* OSBYTE $8F - Issue service call
|
* OSBYTE $8F - Issue service call
|
||||||
* X=service call, Y=parameter
|
* X=service call, Y=parameter
|
||||||
|
|
|
@ -35,7 +35,7 @@ ADVALBUF INX
|
||||||
BEQ :ADVALOK ; Serial input, return 0
|
BEQ :ADVALOK ; Serial input, return 0
|
||||||
LDX #$01 ; For outputs, return 1 char free
|
LDX #$01 ; For outputs, return 1 char free
|
||||||
RTS
|
RTS
|
||||||
:ADVALKBD BIT $C000 ; Test keyboard data/strobe
|
:ADVALKBD BIT KEYBOARD ; Test keyboard data/strobe
|
||||||
BPL :ADVALOK ; No Strobe, return 0
|
BPL :ADVALOK ; No Strobe, return 0
|
||||||
INX ; Strobe, return 1
|
INX ; Strobe, return 1
|
||||||
:ADVALOK RTS
|
:ADVALOK RTS
|
||||||
|
@ -73,7 +73,7 @@ BEEP PHA
|
||||||
BNE :L2 ; 3cy/2cy (BEEPX-1) * 3cy + 1 * 2cy
|
BNE :L2 ; 3cy/2cy (BEEPX-1) * 3cy + 1 * 2cy
|
||||||
*------------------------------------------------------
|
*------------------------------------------------------
|
||||||
* BEEPX*5-1cy
|
* BEEPX*5-1cy
|
||||||
LDA $C030 ; 4cy BEEPX*5+5
|
LDA SPKR ; 4cy BEEPX*5+5
|
||||||
DEY ; 2cy BEEPX*5+7
|
DEY ; 2cy BEEPX*5+7
|
||||||
BNE :L1 ; 3cy/2cy BEEPX*5+10
|
BNE :L1 ; 3cy/2cy BEEPX*5+10
|
||||||
PLY ;
|
PLY ;
|
||||||
|
@ -361,9 +361,9 @@ EVENT RTS
|
||||||
|
|
||||||
* Initialize ROMTAB according to user selection in menu
|
* Initialize ROMTAB according to user selection in menu
|
||||||
ROMINIT STZ MAXROM ; One sideways ROM only
|
ROMINIT STZ MAXROM ; One sideways ROM only
|
||||||
STA $C002 ; Read main mem
|
STA RDMAINRAM ; Read main mem
|
||||||
LDA USERSEL ; *TO DO* Should be actual number of ROMs
|
LDA USERSEL ; *TO DO* Should be actual number of ROMs
|
||||||
STA $C003 ; Read aux mem
|
STA RDCARDRAM ; Read aux mem
|
||||||
|
|
||||||
CMP #6
|
CMP #6
|
||||||
BNE :X1
|
BNE :X1
|
||||||
|
@ -387,9 +387,9 @@ GSBRKAUX >>> IENTAUX ; IENTAUX does not do CLI
|
||||||
IRQBRKHDLR PHA
|
IRQBRKHDLR PHA
|
||||||
* Mustn't enable IRQs within the IRQ handler
|
* Mustn't enable IRQs within the IRQ handler
|
||||||
* Do not use WRTMAIN/WRTAUX macros
|
* Do not use WRTMAIN/WRTAUX macros
|
||||||
STA $C004 ; Write to main memory
|
STA WRMAINRAM ; Write to main memory
|
||||||
STA $45 ; $45=A for ProDOS IRQ handlers
|
STA $45 ; $45=A for ProDOS IRQ handlers
|
||||||
STA $C005 ; Write to aux memory
|
STA WRCARDRAM ; Write to aux memory
|
||||||
|
|
||||||
TXA
|
TXA
|
||||||
PHA
|
PHA
|
||||||
|
|
|
@ -735,7 +735,7 @@ EXECNOTFND JMP ERRNOTFND ; File not found
|
||||||
* --------------------
|
* --------------------
|
||||||
* Turn Apple II accelerators on
|
* Turn Apple II accelerators on
|
||||||
CMDFAST LDA #$80 ; Apple IIgs
|
CMDFAST LDA #$80 ; Apple IIgs
|
||||||
TSB $C036
|
TSB CYAREG
|
||||||
STA GSSPEED
|
STA GSSPEED
|
||||||
JSR ZIPUNLOCK ; ZipChip
|
JSR ZIPUNLOCK ; ZipChip
|
||||||
JSR ZIPDETECT
|
JSR ZIPDETECT
|
||||||
|
@ -749,7 +749,7 @@ CMDFAST LDA #$80 ; Apple IIgs
|
||||||
* --------------------
|
* --------------------
|
||||||
* Turn Apple II accelerators off
|
* Turn Apple II accelerators off
|
||||||
CMDSLOW LDA #$80 ; Apple IIgs
|
CMDSLOW LDA #$80 ; Apple IIgs
|
||||||
TRB $C036
|
TRB CYAREG
|
||||||
STZ GSSPEED
|
STZ GSSPEED
|
||||||
JSR ZIPUNLOCK ; ZipChip
|
JSR ZIPUNLOCK ; ZipChip
|
||||||
JSR ZIPDETECT
|
JSR ZIPDETECT
|
||||||
|
|
74
auxmem.vdu.s
74
auxmem.vdu.s
|
@ -321,7 +321,7 @@ VDU127 JSR VDU08 ; Move cursor back
|
||||||
|
|
||||||
* Display character at current (TEXTX,TEXTY)
|
* Display character at current (TEXTX,TEXTY)
|
||||||
PRCHRC PHA ; Save character
|
PRCHRC PHA ; Save character
|
||||||
LDA $C000
|
LDA KEYBOARD
|
||||||
BPL :RESUME ; No key pressed
|
BPL :RESUME ; No key pressed
|
||||||
EOR #$80
|
EOR #$80
|
||||||
:PAUSE1 JSR KBDCHKESC ; Ask KBD to test if Escape
|
:PAUSE1 JSR KBDCHKESC ; Ask KBD to test if Escape
|
||||||
|
@ -329,8 +329,8 @@ PRCHRC PHA ; Save character
|
||||||
BMI :RESUMEACK ; Escape, skip pausing
|
BMI :RESUMEACK ; Escape, skip pausing
|
||||||
CMP #$13
|
CMP #$13
|
||||||
BNE :RESUME ; Not Ctrl-S
|
BNE :RESUME ; Not Ctrl-S
|
||||||
STA $C010 ; Ack. keypress
|
STA KBDSTRB ; Ack. keypress
|
||||||
:PAUSE2 LDA $C000
|
:PAUSE2 LDA KEYBOARD
|
||||||
BPL :PAUSE2 ; Loop until keypress
|
BPL :PAUSE2 ; Loop until keypress
|
||||||
EOR #$80
|
EOR #$80
|
||||||
CMP #$11 ; Ctrl-Q
|
CMP #$11 ; Ctrl-Q
|
||||||
|
@ -338,7 +338,7 @@ PRCHRC PHA ; Save character
|
||||||
JSR KBDCHKESC ; Ask KBD to test if Escape
|
JSR KBDCHKESC ; Ask KBD to test if Escape
|
||||||
BIT ESCFLAG
|
BIT ESCFLAG
|
||||||
BPL :PAUSE2 ; No Escape, keep pausing
|
BPL :PAUSE2 ; No Escape, keep pausing
|
||||||
:RESUMEACK STA $C010 ; Ack. keypress
|
:RESUMEACK STA KBDSTRB ; Ack. keypress
|
||||||
:RESUME PLA
|
:RESUME PLA
|
||||||
|
|
||||||
* Put character to screen
|
* Put character to screen
|
||||||
|
@ -385,9 +385,9 @@ GETCHRC JSR CHARADDR ; Find character address
|
||||||
BIT VDUBANK
|
BIT VDUBANK
|
||||||
BMI GETCHRGS
|
BMI GETCHRGS
|
||||||
BCC GETCHR6 ; Aux memory
|
BCC GETCHR6 ; Aux memory
|
||||||
STA $C002 ; Read main memory
|
STA RDMAINRAM ; Read main memory
|
||||||
GETCHR6 LDA (VDUADDR),Y ; Get character
|
GETCHR6 LDA (VDUADDR),Y ; Get character
|
||||||
STA $C003 ; Read aux memory
|
STA RDCARDRAM ; Read aux memory
|
||||||
TAY ; Convert character
|
TAY ; Convert character
|
||||||
AND #$A0
|
AND #$A0
|
||||||
BNE GETCHR7
|
BNE GETCHR7
|
||||||
|
@ -400,9 +400,9 @@ GETCHR7 TYA
|
||||||
TAX ; X=char
|
TAX ; X=char
|
||||||
GETCHROK RTS
|
GETCHROK RTS
|
||||||
GETCHRGS BCC GETCHR8 ; Aux memory
|
GETCHRGS BCC GETCHR8 ; Aux memory
|
||||||
STA $C002 ; Read main memory
|
STA RDMAINRAM ; Read main memory
|
||||||
GETCHR8 LDA [VDUADDR],Y ; Get character
|
GETCHR8 LDA [VDUADDR],Y ; Get character
|
||||||
STA $C003 ; Read aux memory
|
STA RDCARDRAM ; Read aux memory
|
||||||
TAY ; Convert character
|
TAY ; Convert character
|
||||||
AND #$A0
|
AND #$A0
|
||||||
BNE GETCHR9
|
BNE GETCHR9
|
||||||
|
@ -433,7 +433,7 @@ CHARADDRY ASL
|
||||||
LDA SCNTAB+1,Y ; MSB of row address
|
LDA SCNTAB+1,Y ; MSB of row address
|
||||||
STA VDUADDR+1
|
STA VDUADDR+1
|
||||||
LDA VDUTEXTX
|
LDA VDUTEXTX
|
||||||
BIT $C01F
|
BIT RD80VID
|
||||||
SEC
|
SEC
|
||||||
BPL CHARADDR40 ; 40-col
|
BPL CHARADDR40 ; 40-col
|
||||||
LSR A
|
LSR A
|
||||||
|
@ -545,7 +545,7 @@ VDU31 LDY VDUQ+8
|
||||||
LDX VDUQ+7
|
LDX VDUQ+7
|
||||||
CPX #80
|
CPX #80
|
||||||
BCS :DONE
|
BCS :DONE
|
||||||
BIT $C01F
|
BIT RD80VID
|
||||||
BMI :T9A
|
BMI :T9A
|
||||||
CPX #40
|
CPX #40
|
||||||
BCS :DONE
|
BCS :DONE
|
||||||
|
@ -598,15 +598,15 @@ VDU22 LDA VDUQ+8
|
||||||
STA CURSORED ; Edit cursor when editing
|
STA CURSORED ; Edit cursor when editing
|
||||||
JSR VDU20 ; Default colours
|
JSR VDU20 ; Default colours
|
||||||
JSR VDU26 ; Default windows
|
JSR VDU26 ; Default windows
|
||||||
STA $C052 ; Clear MIXED
|
STA FULLGR ; Clear MIXED mode
|
||||||
LDA VDUSCREEN
|
LDA VDUSCREEN
|
||||||
BMI VDU22G ; b7=1, graphics mode
|
BMI VDU22G ; b7=1, graphics mode
|
||||||
AND #$01 ; 40col/80col bit
|
AND #$01 ; 40col/80col bit
|
||||||
TAX
|
TAX
|
||||||
STA $C00C,X ; Select 40col/80col
|
STA CLR80VID,X ; Select 40col/80col
|
||||||
STA $C051 ; Enable Text
|
STA TEXTON ; Enable Text
|
||||||
STA $C055 ; PAGE2
|
STA PAGE2 ; PAGE2
|
||||||
STA $C00F ; Enable alt charset
|
STA SETALTCHAR ; Enable alt charset
|
||||||
* Fall through into CLS
|
* Fall through into CLS
|
||||||
|
|
||||||
|
|
||||||
|
@ -638,10 +638,10 @@ VDU12 STZ FXLINES
|
||||||
VDU12SOFT JMP VDU16 ; *TEMP*
|
VDU12SOFT JMP VDU16 ; *TEMP*
|
||||||
|
|
||||||
VDU22G JSR VDU12 ; Clear text and HGR screen
|
VDU22G JSR VDU12 ; Clear text and HGR screen
|
||||||
STA $C057 ; Hi-Res
|
STA HIRES ; Hi-Res
|
||||||
STA $C050 ; Enable Graphics
|
STA GRON ; Enable Graphics
|
||||||
STA $C054 ; PAGE1
|
STA PAGE1 ; PAGE1
|
||||||
STA $C00C ; Select 40col text
|
STA CLR80VID ; Select 40col text
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
|
@ -650,7 +650,7 @@ CLREOL JSR CHARADDR ; Set VDUADDR=>start of line
|
||||||
INC TXTWINRGT
|
INC TXTWINRGT
|
||||||
BIT VDUBANK
|
BIT VDUBANK
|
||||||
BMI CLREOLGS ; AppleGS
|
BMI CLREOLGS ; AppleGS
|
||||||
BIT $C01F
|
BIT RD80VID
|
||||||
BPL :FORTY ; 40-col mode
|
BPL :FORTY ; 40-col mode
|
||||||
:EIGHTY LDX VDUTEXTX ; Addr offset for column
|
:EIGHTY LDX VDUTEXTX ; Addr offset for column
|
||||||
:L1 TXA ; Column/2 into Y
|
:L1 TXA ; Column/2 into Y
|
||||||
|
@ -679,7 +679,7 @@ CLREOLDONE DEC TXTWINRGT
|
||||||
BPL :NOHIRES
|
BPL :NOHIRES
|
||||||
JMP HSCRCLREOL ; Clear an HGR line
|
JMP HSCRCLREOL ; Clear an HGR line
|
||||||
:NOHIRES RTS
|
:NOHIRES RTS
|
||||||
CLREOLGS BIT $C01F
|
CLREOLGS BIT RD80VID
|
||||||
BPL :FORTY ; 40-col mode
|
BPL :FORTY ; 40-col mode
|
||||||
:EIGHTY LDX VDUTEXTX ; Addr offset for column
|
:EIGHTY LDX VDUTEXTX ; Addr offset for column
|
||||||
:L1 TXA ; Column/2 into Y
|
:L1 TXA ; Column/2 into Y
|
||||||
|
@ -788,7 +788,7 @@ DOSCR1LINE INC TXTWINRGT
|
||||||
BIT VDUBANK
|
BIT VDUBANK
|
||||||
BMI SCR1LINEGS ; AppleGS
|
BMI SCR1LINEGS ; AppleGS
|
||||||
LDX TXTWINLFT ; Addr offset for column
|
LDX TXTWINLFT ; Addr offset for column
|
||||||
BIT $C01F
|
BIT RD80VID
|
||||||
BPL :FORTY ; 40-col mode
|
BPL :FORTY ; 40-col mode
|
||||||
:EIGHTY
|
:EIGHTY
|
||||||
:L1 TXA ; Column/2 into Y
|
:L1 TXA ; Column/2 into Y
|
||||||
|
@ -799,10 +799,10 @@ DOSCR1LINE INC TXTWINRGT
|
||||||
STA (VDUADDR2),Y
|
STA (VDUADDR2),Y
|
||||||
BRA :SKIPMAIN
|
BRA :SKIPMAIN
|
||||||
:MAIN >>> WRTMAIN
|
:MAIN >>> WRTMAIN
|
||||||
STA $C002 ; Read main memory
|
STA RDMAINRAM ; Read main memory
|
||||||
LDA (VDUADDR),Y
|
LDA (VDUADDR),Y
|
||||||
STA (VDUADDR2),Y
|
STA (VDUADDR2),Y
|
||||||
STA $C003 ; Read aux memory
|
STA RDCARDRAM ; Read aux memory
|
||||||
>>> WRTAUX
|
>>> WRTAUX
|
||||||
:SKIPMAIN INX
|
:SKIPMAIN INX
|
||||||
CPX TXTWINRGT
|
CPX TXTWINRGT
|
||||||
|
@ -811,10 +811,10 @@ DOSCR1LINE INC TXTWINRGT
|
||||||
:FORTY TXA
|
:FORTY TXA
|
||||||
TAY
|
TAY
|
||||||
:L2 >>> WRTMAIN
|
:L2 >>> WRTMAIN
|
||||||
STA $C002 ; Read main memory
|
STA RDMAINRAM ; Read main memory
|
||||||
LDA (VDUADDR),Y
|
LDA (VDUADDR),Y
|
||||||
STA (VDUADDR2),Y
|
STA (VDUADDR2),Y
|
||||||
STA $C003 ; Read aux memory
|
STA RDCARDRAM ; Read aux memory
|
||||||
>>> WRTAUX
|
>>> WRTAUX
|
||||||
INY
|
INY
|
||||||
CPY TXTWINRGT
|
CPY TXTWINRGT
|
||||||
|
@ -823,7 +823,7 @@ SCR1LNDONE DEC TXTWINRGT
|
||||||
PLA
|
PLA
|
||||||
RTS
|
RTS
|
||||||
SCR1LINEGS LDX TXTWINLFT
|
SCR1LINEGS LDX TXTWINLFT
|
||||||
BIT $C01F
|
BIT RD80VID
|
||||||
BPL :FORTY ; 40-col mode
|
BPL :FORTY ; 40-col mode
|
||||||
:EIGHTY
|
:EIGHTY
|
||||||
:L1 TXA ; Column/2 into Y
|
:L1 TXA ; Column/2 into Y
|
||||||
|
@ -834,20 +834,20 @@ SCR1LINEGS LDX TXTWINLFT
|
||||||
STA VDUBANK
|
STA VDUBANK
|
||||||
STA VDUBANK2
|
STA VDUBANK2
|
||||||
>>> WRTMAIN
|
>>> WRTMAIN
|
||||||
STA $C002 ; Read main memory
|
STA RDMAINRAM ; Read main memory
|
||||||
LDA [VDUADDR],Y ; Even cols in bank $E1
|
LDA [VDUADDR],Y ; Even cols in bank $E1
|
||||||
STA [VDUADDR2],Y
|
STA [VDUADDR2],Y
|
||||||
STA $C003 ; Read aux memory
|
STA RDCARDRAM ; Read aux memory
|
||||||
>>> WRTAUX
|
>>> WRTAUX
|
||||||
BRA :SKIPE0
|
BRA :SKIPE0
|
||||||
:E0 LDA #$E0
|
:E0 LDA #$E0
|
||||||
STA VDUBANK
|
STA VDUBANK
|
||||||
STA VDUBANK2
|
STA VDUBANK2
|
||||||
>>> WRTMAIN
|
>>> WRTMAIN
|
||||||
STA $C002 ; Read main memory
|
STA RDMAINRAM ; Read main memory
|
||||||
LDA [VDUADDR],Y ; Odd cols in bank $E0
|
LDA [VDUADDR],Y ; Odd cols in bank $E0
|
||||||
STA [VDUADDR2],Y
|
STA [VDUADDR2],Y
|
||||||
STA $C003 ; Read aux memory
|
STA RDCARDRAM ; Read aux memory
|
||||||
>>> WRTAUX
|
>>> WRTAUX
|
||||||
:SKIPE0 INX
|
:SKIPE0 INX
|
||||||
CPX TXTWINRGT
|
CPX TXTWINRGT
|
||||||
|
@ -858,10 +858,10 @@ SCR1LINEGS LDX TXTWINLFT
|
||||||
LDA #$E0
|
LDA #$E0
|
||||||
STA VDUBANK
|
STA VDUBANK
|
||||||
:L2 >>> WRTMAIN
|
:L2 >>> WRTMAIN
|
||||||
STA $C002 ; Read main memory
|
STA RDMAINRAM ; Read main memory
|
||||||
LDA [VDUADDR],Y
|
LDA [VDUADDR],Y
|
||||||
STA [VDUADDR2],Y
|
STA [VDUADDR2],Y
|
||||||
STA $C003 ; Read aux memory
|
STA RDCARDRAM ; Read aux memory
|
||||||
>>> WRTAUX
|
>>> WRTAUX
|
||||||
INY
|
INY
|
||||||
CPY TXTWINRGT
|
CPY TXTWINRGT
|
||||||
|
@ -884,14 +884,14 @@ VDU16 JMP HSCRCLEAR
|
||||||
VDU20
|
VDU20
|
||||||
* THE FOLLOWING TWO LINES ARE FOR GS ONLY & NOT SAFE ON //c
|
* THE FOLLOWING TWO LINES ARE FOR GS ONLY & NOT SAFE ON //c
|
||||||
* LDA #$F0
|
* LDA #$F0
|
||||||
* STA $C022 ; Set text palette
|
* STA TBCOLOR ; Set text palette
|
||||||
LDX #VDUCOLEND-TXTFGD
|
LDX #VDUCOLEND-TXTFGD
|
||||||
LDA #$00
|
LDA #$00
|
||||||
VDU20LP STA TXTFGD,X ; Clear all colours
|
VDU20LP STA TXTFGD,X ; Clear all colours
|
||||||
DEX ; and gcol actions
|
DEX ; and gcol actions
|
||||||
BPL VDU20LP
|
BPL VDU20LP
|
||||||
* THE FOLLOWING LINE IS FOR GS ONLY & NOT SAFE ON //c
|
* THE FOLLOWING LINE IS FOR GS ONLY & NOT SAFE ON //c
|
||||||
* STA $C034 ; Set border
|
* STA CLOCKCTL ; Set border
|
||||||
LDA #$80
|
LDA #$80
|
||||||
JSR HSCRSETTCOL ; Set txt background
|
JSR HSCRSETTCOL ; Set txt background
|
||||||
LDX #$00
|
LDX #$00
|
||||||
|
@ -917,7 +917,7 @@ VDU17BORDER AND #$0F
|
||||||
STA VDUBORDER
|
STA VDUBORDER
|
||||||
TAX
|
TAX
|
||||||
LDA CLRTRANS16,X
|
LDA CLRTRANS16,X
|
||||||
STA $C034
|
STA CLOCKCTL
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* VDU 18 - GCOL k,a - select graphics colour and plot action
|
* VDU 18 - GCOL k,a - select graphics colour and plot action
|
||||||
|
@ -1091,7 +1091,7 @@ VDU25BACKUP2 LDA GFXPOSNX,X ; POSN becomes LAST
|
||||||
LDA VDUPIXELS
|
LDA VDUPIXELS
|
||||||
BEQ :S2
|
BEQ :S2
|
||||||
JSR HGRPLOTTER
|
JSR HGRPLOTTER
|
||||||
:S2 LDA $C000 ; This and PRCHRC need to be
|
:S2 LDA KEYBOARD ; This and PRCHRC need to be
|
||||||
EOR #$80 ; made more generalised
|
EOR #$80 ; made more generalised
|
||||||
BMI VDU25EXIT ; No key pressed
|
BMI VDU25EXIT ; No key pressed
|
||||||
JSR KBDCHKESC ; Ask KBD to test if Escape
|
JSR KBDCHKESC ; Ask KBD to test if Escape
|
||||||
|
|
|
@ -92,13 +92,13 @@ GSBRK >>> XF2AUX,GSBRKAUX
|
||||||
*:S1 RTS
|
*:S1 RTS
|
||||||
*
|
*
|
||||||
* Reset handler - invoked on Ctrl-Reset
|
* Reset handler - invoked on Ctrl-Reset
|
||||||
* XFER to AUXMOS ($C000) in aux, AuxZP on, LC on
|
* XFER to AUXMOS ($D000) in aux, AuxZP on, LC on
|
||||||
RESET TSX
|
RESET TSX
|
||||||
STX $0100
|
STX $0100
|
||||||
LDA $C058 ; AN0 off
|
LDA AN0OFF ; AN0 off
|
||||||
LDA $C05A ; AN1 off
|
LDA AN1OFF ; AN1 off
|
||||||
LDA $C05D ; AN2 on
|
LDA AN2ON ; AN2 on
|
||||||
LDA $C05F ; AN3 on
|
LDA AN3ON ; AN3 on
|
||||||
>>> XF2AUX,AUXMOS
|
>>> XF2AUX,AUXMOS
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
157
mainmem.ldr.s
157
mainmem.ldr.s
|
@ -71,7 +71,7 @@ RTSINST LDA CMDPATH
|
||||||
CMP #'/'
|
CMP #'/'
|
||||||
BEQ DISCONN ; CMDPATH already absolute path
|
BEQ DISCONN ; CMDPATH already absolute path
|
||||||
:GETPFX JSR MLI
|
:GETPFX JSR MLI
|
||||||
DB $C7 ; Get Prefix
|
DB GPFXCMD ; Get Prefix
|
||||||
DW GETPFXPARM
|
DW GETPFXPARM
|
||||||
|
|
||||||
* Disconnect /RAM ramdrive to avoid aux corruption
|
* Disconnect /RAM ramdrive to avoid aux corruption
|
||||||
|
@ -154,12 +154,12 @@ DISCONN LDA MACHID
|
||||||
LDA #>RESET
|
LDA #>RESET
|
||||||
STA RSTV+1
|
STA RSTV+1
|
||||||
EOR #$A5 ; Checksum
|
EOR #$A5 ; Checksum
|
||||||
STA RSTV+2
|
STA PWRDUP
|
||||||
|
|
||||||
LDA #<GSBRK ; Set BRK vector in main mem
|
LDA #<GSBRK ; Set BREAK vector in main mem
|
||||||
STA $3F0
|
STA BREAKV
|
||||||
LDA #>GSBRK
|
LDA #>GSBRK
|
||||||
STA $3F0+1
|
STA BREAKV+1
|
||||||
|
|
||||||
JSR GFXINIT ; Initialize FDraw graphics
|
JSR GFXINIT ; Initialize FDraw graphics
|
||||||
|
|
||||||
|
@ -184,14 +184,14 @@ UNSUPLP LDA UNSUPMSG,X
|
||||||
JSR COUT1
|
JSR COUT1
|
||||||
INX
|
INX
|
||||||
BNE UNSUPLP
|
BNE UNSUPLP
|
||||||
UNSUPWAIT STA $C010
|
UNSUPWAIT STA KBDSTRB
|
||||||
UNSUPKEY LDA $C000
|
UNSUPKEY LDA KEYBOARD
|
||||||
BPL UNSUPKEY
|
BPL UNSUPKEY
|
||||||
STA $C010
|
STA KBDSTRB
|
||||||
|
|
||||||
JSR MLI
|
JSR MLI
|
||||||
DB QUITCMD
|
DB QUITCMD
|
||||||
DW UNSUPQPARM
|
DW UNSUPQPARM
|
||||||
UNSUPQPARM DB $04,$00,$00,$00,$00,$00,$00
|
UNSUPQPARM DB $04,$00,$00,$00,$00,$00,$00
|
||||||
|
|
||||||
UNSUPMSG ASC "APPLECORN REQUIRES AN APPLE IIGS, APPLE", 8D
|
UNSUPMSG ASC "APPLECORN REQUIRES AN APPLE IIGS, APPLE", 8D
|
||||||
|
@ -200,140 +200,3 @@ UNSUPMSG ASC "APPLECORN REQUIRES AN APPLE IIGS, APPLE", 8D
|
||||||
ASC "PRESS ANY KEY TO QUIT TO PRODOS", 00
|
ASC "PRESS ANY KEY TO QUIT TO PRODOS", 00
|
||||||
|
|
||||||
ENDSYSTEM
|
ENDSYSTEM
|
||||||
|
|
||||||
; Original APPLECORN.BIN code started here
|
|
||||||
|
|
||||||
*START
|
|
||||||
* LDA #>AUXADDR ; Address in aux
|
|
||||||
* LDX #<AUXADDR
|
|
||||||
* SEC ; Load into aux
|
|
||||||
* JSR LOADCODE ; Load lang ROM
|
|
||||||
*
|
|
||||||
* JSR GFXINIT ; Initialize FDraw graphics
|
|
||||||
*
|
|
||||||
* TSX ; Save SP at $0100 in aux
|
|
||||||
* >>> ALTZP
|
|
||||||
* STX $0100
|
|
||||||
* >>> MAINZP
|
|
||||||
* >>> XF2AUX,AUXMOS1
|
|
||||||
*
|
|
||||||
* Load image from file into memory
|
|
||||||
* On entry: OPENPL set up to point to leafname of file to load
|
|
||||||
* Loads file from directory applecorn started from
|
|
||||||
* Uses BLKBUF at loading buffer
|
|
||||||
* Load address in A,X
|
|
||||||
* Carry set->load to aux, carry clear->load to main
|
|
||||||
*LOADCODE PHP ; Save carry flag
|
|
||||||
* STA :ADDRH ; MSB of load address
|
|
||||||
* STX :ADDRL ; LSB of load address
|
|
||||||
* STZ :BLOCKS
|
|
||||||
*
|
|
||||||
* LDX #0
|
|
||||||
*:LP1 LDA CMDPATH+1,X ; Copy Applecorn path to MOSFILE
|
|
||||||
* STA MOSFILE2+1,X
|
|
||||||
* INX
|
|
||||||
* CPX CMDPATH
|
|
||||||
* BCC :LP1
|
|
||||||
*:LP2 DEX
|
|
||||||
* LDA MOSFILE2+1,X
|
|
||||||
* CMP #'/'
|
|
||||||
* BNE :LP2
|
|
||||||
* LDA OPENPL+1
|
|
||||||
* STA A1L
|
|
||||||
* LDA OPENPL+2
|
|
||||||
* STA A1H
|
|
||||||
* LDY #1
|
|
||||||
* LDA (A1L),Y
|
|
||||||
* CMP #'/'
|
|
||||||
* BEQ :L4 ; Already absolute path
|
|
||||||
*:LP3 LDA (A1L),Y
|
|
||||||
* STA MOSFILE2+2,X
|
|
||||||
* INX
|
|
||||||
* INY
|
|
||||||
* TYA
|
|
||||||
* CMP (A1L)
|
|
||||||
* BCC :LP3
|
|
||||||
* BEQ :LP3
|
|
||||||
* INX
|
|
||||||
* STX MOSFILE2+0
|
|
||||||
* LDA #<MOSFILE2 ; Point to absolute path
|
|
||||||
* STA OPENPL+1
|
|
||||||
* LDA #>MOSFILE2
|
|
||||||
* STA OPENPL+2
|
|
||||||
*
|
|
||||||
*:L4 JSR OPENFILE ; Open ROM file
|
|
||||||
* BCC :S1
|
|
||||||
* PLP
|
|
||||||
* BCC :L1A ; Load to main, report error
|
|
||||||
* RTS ; Load to aux, return CS=Failed
|
|
||||||
*:L1A LDX #$00
|
|
||||||
*:L1B LDA :CANTOPEN,X ; Part one of error msg
|
|
||||||
* BEQ :S0
|
|
||||||
* JSR COUT1
|
|
||||||
* INX
|
|
||||||
* BRA :L1B
|
|
||||||
*:S0 LDA OPENPL+1 ; Print filename
|
|
||||||
* STA A1L
|
|
||||||
* LDA OPENPL+2
|
|
||||||
* STA A1H
|
|
||||||
* LDY #$00
|
|
||||||
* LDA (A1L),Y
|
|
||||||
* STA :LEN
|
|
||||||
*:L1C CPY :LEN
|
|
||||||
* BEQ :ERR1
|
|
||||||
* INY
|
|
||||||
* LDA (A1L),Y
|
|
||||||
* JSR COUT1
|
|
||||||
* BRA :L1C
|
|
||||||
*:ERR1 JSR CROUT
|
|
||||||
* JSR BELL
|
|
||||||
*:SPIN BRA :SPIN
|
|
||||||
*:S1 LDA OPENPL+5 ; File reference number
|
|
||||||
* STA READPL+1
|
|
||||||
*:L2 PLP
|
|
||||||
* PHP
|
|
||||||
* BCS :L2A ; Loading to aux, skip dots
|
|
||||||
* LDA #'.'+$80 ; Print progress dots
|
|
||||||
* JSR COUT1
|
|
||||||
*:L2A JSR RDFILE ; Read file block by block
|
|
||||||
* BCS :CLOSE ; EOF (0 bytes left) or some error
|
|
||||||
* LDA #<BLKBUF ; Source start addr -> A1L,A1H
|
|
||||||
* STA A1L
|
|
||||||
* LDA #>BLKBUF
|
|
||||||
* STA A1H
|
|
||||||
* LDA #<BLKBUFEND ; Source end addr -> A2L,A2H
|
|
||||||
* STA A2L
|
|
||||||
* LDA #>BLKBUFEND
|
|
||||||
* STA A2H
|
|
||||||
* LDA :ADDRL ; Dest in aux -> A4L, A4H
|
|
||||||
* STA A4L
|
|
||||||
* LDA :ADDRH
|
|
||||||
* LDX :BLOCKS
|
|
||||||
*:L3 CPX #$00
|
|
||||||
* BEQ :S2
|
|
||||||
* INC
|
|
||||||
* INC
|
|
||||||
* DEX
|
|
||||||
* BRA :L3
|
|
||||||
*:S2 STA A4H
|
|
||||||
* PLP ; Recover carry flag
|
|
||||||
* PHP
|
|
||||||
* BCS :TOAUX
|
|
||||||
* JSR MEMCPY ; Destination in main mem
|
|
||||||
* BRA :S3
|
|
||||||
*:TOAUX JSR AUXMOVE ; Carry already set (so to aux)
|
|
||||||
*:S3 INC :BLOCKS
|
|
||||||
* BRA :L2
|
|
||||||
*:CLOSE LDA OPENPL+5 ; File reference number
|
|
||||||
* STA CLSPL+1
|
|
||||||
* JSR CLSFILE
|
|
||||||
* JSR CROUT
|
|
||||||
* PLP
|
|
||||||
* CLC ; CC=Ok
|
|
||||||
* RTS
|
|
||||||
*:ADDRL DB $00 ; Destination address (LSB)
|
|
||||||
*:ADDRH DB $00 ; Destination address (MSB)
|
|
||||||
*:BLOCKS DB $00 ; Counter for blocks read
|
|
||||||
*:LEN DB $00 ; Length of filename
|
|
||||||
*:CANTOPEN ASC "Unable to open "
|
|
||||||
* DB $00
|
|
||||||
|
|
|
@ -20,9 +20,9 @@ ROMMENU JSR HOME ; Clear screen
|
||||||
BNE :LP0
|
BNE :LP0
|
||||||
:LP1
|
:LP1
|
||||||
|
|
||||||
:KEYIN LDA $C000 ; Kdb data / strobe
|
:KEYIN LDA KEYBOARD ; Kdb data / strobe
|
||||||
BPL :KEYIN ; Wait for keystroke
|
BPL :KEYIN ; Wait for keystroke
|
||||||
STA $C010 ; Clear strobe
|
STA KBDSTRB ; Clear strobe
|
||||||
AND #$7F
|
AND #$7F
|
||||||
SEC
|
SEC
|
||||||
SBC #'1' ; '1'->0, '2'->1 etc.
|
SBC #'1' ; '1'->0, '2'->1 etc.
|
||||||
|
|
|
@ -27,14 +27,14 @@ MEMCPY LDA (A1L)
|
||||||
* Copy 512 bytes from BLKBUF to AUXBLK in aux LC
|
* Copy 512 bytes from BLKBUF to AUXBLK in aux LC
|
||||||
COPYAUXBLK >>> ALTZP ; Alt ZP & Alt LC on
|
COPYAUXBLK >>> ALTZP ; Alt ZP & Alt LC on
|
||||||
LDY #$00
|
LDY #$00
|
||||||
STA $C005 ; Write aux mem
|
STA WRCARDRAM ; Write aux mem
|
||||||
:L1 LDA BLKBUF+$000,Y
|
:L1 LDA BLKBUF+$000,Y
|
||||||
STA AUXBLK+$000,Y
|
STA AUXBLK+$000,Y
|
||||||
LDA BLKBUF+$100,Y
|
LDA BLKBUF+$100,Y
|
||||||
STA AUXBLK+$100,Y
|
STA AUXBLK+$100,Y
|
||||||
INY
|
INY
|
||||||
BNE :L1
|
BNE :L1
|
||||||
STA $C004 ; Write main mem
|
STA WRMAINRAM ; Write main mem
|
||||||
:S2 >>> MAINZP ; Alt ZP off, ROM back in
|
:S2 >>> MAINZP ; Alt ZP off, ROM back in
|
||||||
RTSINSTR RTS
|
RTSINSTR RTS
|
||||||
|
|
||||||
|
@ -98,12 +98,12 @@ EXISTS LDA #<MOSFILE
|
||||||
* Preserves A
|
* Preserves A
|
||||||
COPYFB PHA
|
COPYFB PHA
|
||||||
LDX #$11 ; 18 bytes in FILEBLK
|
LDX #$11 ; 18 bytes in FILEBLK
|
||||||
STA $C005 ; Write to aux mem
|
STA WRCARDRAM ; Write to aux mem
|
||||||
:L1 LDA FILEBLK,X
|
:L1 LDA FILEBLK,X
|
||||||
STA OSFILECB,X
|
STA OSFILECB,X
|
||||||
DEX
|
DEX
|
||||||
BPL :L1
|
BPL :L1
|
||||||
STA $C004 ; Write to main mem again
|
STA WRMAINRAM ; Write to main mem again
|
||||||
PLA
|
PLA
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
|
@ -359,9 +359,9 @@ GBPB >>> ENTMAIN
|
||||||
LDA GBPBDAT+1
|
LDA GBPBDAT+1
|
||||||
STA ZPMOS+1
|
STA ZPMOS+1
|
||||||
LDA BLKBUF
|
LDA BLKBUF
|
||||||
STA $C005 ; Write to aux
|
STA WRCARDRAM ; Write to aux
|
||||||
STA (ZPMOS) ; Store byte in aux mem
|
STA (ZPMOS) ; Store byte in aux mem
|
||||||
STA $C004 ; Write to main again
|
STA WRMAINRAM ; Write to main again
|
||||||
BRA :UPDCB
|
BRA :UPDCB
|
||||||
:WRITE LDA #<BLKBUF ; Start of destination
|
:WRITE LDA #<BLKBUF ; Start of destination
|
||||||
STA A4L
|
STA A4L
|
||||||
|
@ -400,7 +400,7 @@ GBPB >>> ENTMAIN
|
||||||
:ERR
|
:ERR
|
||||||
:ZERO PLA ; Throw away A
|
:ZERO PLA ; Throw away A
|
||||||
>>> ALTZP ; Control block can be in ZP!
|
>>> ALTZP ; Control block can be in ZP!
|
||||||
STA $C005 ; Write to aux
|
STA WRCARDRAM ; Write to aux
|
||||||
LDA GBPBAUXCB+0 ; Copy control block back to aux
|
LDA GBPBAUXCB+0 ; Copy control block back to aux
|
||||||
STA $B0+0 ; $B0 in AltZP is temp FS workspace
|
STA $B0+0 ; $B0 in AltZP is temp FS workspace
|
||||||
LDA GBPBAUXCB+1
|
LDA GBPBAUXCB+1
|
||||||
|
@ -410,7 +410,7 @@ GBPB >>> ENTMAIN
|
||||||
STA ($B0),Y
|
STA ($B0),Y
|
||||||
DEY
|
DEY
|
||||||
BPL :L2
|
BPL :L2
|
||||||
STA $C004 ; Write to main again
|
STA WRMAINRAM ; Write to main again
|
||||||
>>> MAINZP
|
>>> MAINZP
|
||||||
>>> XF2AUX,OSGBPBRET
|
>>> XF2AUX,OSGBPBRET
|
||||||
|
|
||||||
|
@ -939,9 +939,9 @@ CHKNOTFND CMP #$44 ; Convert ProDOS 'not found'
|
||||||
|
|
||||||
|
|
||||||
* Quit to ProDOS
|
* Quit to ProDOS
|
||||||
QUIT INC $03F4 ; Invalidate powerup byte
|
QUIT INC PWRDUP ; Invalidate powerup byte
|
||||||
STA $C054 ; PAGE2 off
|
STA PAGE1 ; PAGE2 off
|
||||||
STA $C00E ; Alt font off
|
STA CLRALTCHAR ; Alt font off
|
||||||
JSR MLI
|
JSR MLI
|
||||||
DB QUITCMD
|
DB QUITCMD
|
||||||
DW QUITPL
|
DW QUITPL
|
||||||
|
@ -1196,8 +1196,8 @@ MULTIDEL >>> ENTMAIN
|
||||||
|
|
||||||
|
|
||||||
* Read machid from auxmem
|
* Read machid from auxmem
|
||||||
MACHRD LDA $C081
|
MACHRD LDA ROMIN
|
||||||
LDA $C081
|
LDA ROMIN
|
||||||
LDA $FBC0
|
LDA $FBC0
|
||||||
SEC
|
SEC
|
||||||
JSR $FE1F
|
JSR $FE1F
|
||||||
|
@ -1206,8 +1206,8 @@ MACHRD LDA $C081
|
||||||
* Read mainmem from auxmem
|
* Read mainmem from auxmem
|
||||||
MAINRDMEM STA A1L
|
MAINRDMEM STA A1L
|
||||||
STY A1H
|
STY A1H
|
||||||
LDA $C081
|
LDA ROMIN
|
||||||
LDA $C081
|
LDA ROMIN
|
||||||
LDA (A1L)
|
LDA (A1L)
|
||||||
MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS
|
MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue