2021-08-16 14:58:05 -04:00
|
|
|
* APPLECORN.S
|
|
|
|
* (c) Bobbi 2021 GPLv3
|
|
|
|
*
|
2021-07-25 19:04:51 -04:00
|
|
|
* Load an Acorn BBC Micro ROM in aux memory and
|
2021-07-15 22:16:22 -04:00
|
|
|
* Provide an environment where it can run
|
2021-07-26 20:07:51 -04:00
|
|
|
*
|
2021-08-16 14:58:05 -04:00
|
|
|
* Assembled with the Merlin 8 v2.58 assembler on Apple II.
|
2021-07-15 22:16:22 -04:00
|
|
|
|
2021-10-14 19:10:11 -04:00
|
|
|
* 14-Oct-2021 XF2MAIN, ENTAUX no longer save/restore STRTL/STRTH.
|
|
|
|
|
|
|
|
|
2021-07-28 00:17:47 -04:00
|
|
|
XC ; 65c02
|
2021-09-17 21:06:24 -04:00
|
|
|
ORG $4000 ; Load addr of loader in main memory
|
|
|
|
; Clear of first HGR frame buffer
|
2021-07-15 22:16:22 -04:00
|
|
|
|
|
|
|
* Monitor routines
|
|
|
|
BELL EQU $FBDD
|
|
|
|
PRBYTE EQU $FDDA
|
|
|
|
COUT1 EQU $FDED
|
|
|
|
CROUT EQU $FD8E
|
2021-08-17 20:13:51 -04:00
|
|
|
HOME EQU $FC58
|
2021-07-15 22:16:22 -04:00
|
|
|
AUXMOVE EQU $C311
|
|
|
|
XFER EQU $C314
|
|
|
|
|
|
|
|
* Monitor ZP locations
|
|
|
|
A1L EQU $3C
|
|
|
|
A1H EQU $3D
|
|
|
|
A2L EQU $3E
|
|
|
|
A2H EQU $3F
|
|
|
|
A4L EQU $42
|
|
|
|
A4H EQU $43
|
|
|
|
|
|
|
|
* Used by XFER
|
|
|
|
STRTL EQU $3ED
|
|
|
|
STRTH EQU $3EE
|
|
|
|
|
|
|
|
* Reset vector (2 bytes + 1 byte checksum)
|
|
|
|
RSTV EQU $3F2
|
|
|
|
|
2021-08-05 23:02:13 -04:00
|
|
|
* IRQ vector
|
|
|
|
A2IRQV EQU $3FE
|
|
|
|
|
2021-07-15 22:16:22 -04:00
|
|
|
* MLI entry point
|
|
|
|
MLI EQU $BF00
|
|
|
|
|
2021-07-28 00:17:47 -04:00
|
|
|
* IO Buffer for reading file (1024 bytes)
|
2021-08-29 01:13:31 -04:00
|
|
|
IOBUF0 EQU $0C00 ; For loading/saving, OSFILE, *.
|
|
|
|
IOBUF1 EQU $1000 ; Four open files for langs
|
|
|
|
IOBUF2 EQU $1400
|
|
|
|
IOBUF3 EQU $1800
|
|
|
|
IOBUF4 EQU $1C00
|
2021-07-15 22:16:22 -04:00
|
|
|
|
2021-07-28 20:47:26 -04:00
|
|
|
* 512 byte buffer sufficient for one disk block
|
2021-09-17 21:06:24 -04:00
|
|
|
BLKBUF EQU $9000 ; Can't use $400 as ProDOS uses
|
|
|
|
BLKBUFEND EQU $9200 ; 'hidden' bytes within screen
|
2021-07-15 22:16:22 -04:00
|
|
|
|
2021-09-15 22:03:57 -04:00
|
|
|
* 512 byte buffer for file copy (*COPY)
|
2021-09-17 21:06:24 -04:00
|
|
|
COPYBUF EQU $9200 ; File copy needs separate buffer
|
|
|
|
*COPYBUFEND EQU $9400
|
2021-09-15 22:03:57 -04:00
|
|
|
|
2021-09-21 22:05:42 -04:00
|
|
|
* Location of FDraw library in main memory
|
|
|
|
FDRAWADDR EQU $9400
|
|
|
|
|
2021-09-23 12:59:36 -04:00
|
|
|
* Location of FDraw library in main memory
|
|
|
|
FONTADDR EQU $A900
|
|
|
|
|
2021-07-15 22:16:22 -04:00
|
|
|
* Address in aux memory where ROM will be loaded
|
|
|
|
AUXADDR EQU $8000
|
|
|
|
|
|
|
|
* Address in aux memory where the MOS shim is located
|
2021-07-28 00:17:47 -04:00
|
|
|
AUXMOS1 EQU $2000 ; Temp staging area in Aux
|
2021-08-28 00:44:45 -04:00
|
|
|
EAUXMOS1 EQU $5000 ; End of staging area
|
2021-07-28 00:17:47 -04:00
|
|
|
AUXMOS EQU $D000 ; Final location in aux LC
|
2021-07-15 22:16:22 -04:00
|
|
|
|
2021-07-31 20:37:18 -04:00
|
|
|
* Called by code running in main mem to invoke a
|
|
|
|
* routine in aux memory
|
|
|
|
XF2AUX MAC
|
2021-12-08 11:28:56 -05:00
|
|
|
SEI ; Disable IRQ before XFER
|
2021-08-14 01:18:35 -04:00
|
|
|
LDX $C08B ; R/W LC RAM, bank 1
|
|
|
|
LDX $C08B
|
|
|
|
LDX #<]1
|
|
|
|
STX STRTL
|
|
|
|
LDX #>]1
|
|
|
|
STX STRTH
|
2021-07-31 20:37:18 -04:00
|
|
|
SEC ; Use aux memory
|
2021-11-05 22:09:20 -04:00
|
|
|
BIT RTSINSTR ; Set V: use alt ZP and LC
|
2021-07-31 20:37:18 -04:00
|
|
|
JMP XFER
|
2021-07-30 16:49:34 -04:00
|
|
|
EOM
|
|
|
|
|
2021-07-31 21:39:05 -04:00
|
|
|
* Called by code running in aux mem to invoke a
|
|
|
|
* routine in main memory
|
|
|
|
XF2MAIN MAC
|
2021-10-14 19:10:11 -04:00
|
|
|
* LDX STRTL ; No longer needed
|
|
|
|
* STX STRTBCKL ; $03E0-$03FF reserved for memory
|
|
|
|
* LDX STRTH ; switching
|
|
|
|
* STX STRTBCKH
|
2021-08-14 01:18:35 -04:00
|
|
|
LDX #<]1
|
|
|
|
STX STRTL
|
|
|
|
LDX #>]1
|
|
|
|
STX STRTH
|
2021-08-16 14:58:05 -04:00
|
|
|
SEI ; Disable IRQ before XFER
|
2021-07-31 20:19:15 -04:00
|
|
|
TSX
|
|
|
|
STX $0101 ; Save alt SP
|
2021-08-15 15:27:35 -04:00
|
|
|
LDX $0100 ; Load main SP into X
|
2021-07-31 21:39:05 -04:00
|
|
|
CLC ; Use main mem
|
|
|
|
CLV ; Use main ZP and LC
|
|
|
|
JMP XFER
|
2021-07-30 17:33:50 -04:00
|
|
|
EOM
|
|
|
|
|
2021-07-31 18:58:59 -04:00
|
|
|
* Macro called on re-entry to aux memory
|
2021-08-19 13:50:59 -04:00
|
|
|
* Careful: This enables IRQ - not for use in ISR
|
2021-07-31 18:58:59 -04:00
|
|
|
ENTAUX MAC
|
2021-08-16 14:58:05 -04:00
|
|
|
LDX $0101 ; Recover alt SP
|
|
|
|
TXS
|
|
|
|
CLI ; Re-enable IRQ after XFER
|
2021-10-14 19:10:11 -04:00
|
|
|
* LDX STRTBCKL ; No longer needed
|
|
|
|
* STX STRTL ; $03e0-$03FF reserved for memory
|
|
|
|
* LDX STRTBCKH ; switching
|
|
|
|
* STX STRTH
|
2021-07-30 17:33:50 -04:00
|
|
|
EOM
|
|
|
|
|
2021-07-31 18:58:59 -04:00
|
|
|
* Macro called on re-entry to main memory
|
2021-08-19 13:50:59 -04:00
|
|
|
* Careful: This enables IRQ - not for use in ISR
|
2021-07-31 17:33:08 -04:00
|
|
|
ENTMAIN MAC
|
2021-08-15 15:27:35 -04:00
|
|
|
TXS ; Main SP already in X
|
2021-08-14 01:18:35 -04:00
|
|
|
LDX $C081 ; Bank in ROM
|
|
|
|
LDX $C081
|
2021-08-16 14:58:05 -04:00
|
|
|
CLI ; Re-enable IRQ after XFER
|
2021-07-31 17:33:08 -04:00
|
|
|
EOM
|
|
|
|
|
2021-08-17 12:00:50 -04:00
|
|
|
* Macro called on re-entry to aux memory
|
|
|
|
* For use in interrupt handlers (no CLI!)
|
|
|
|
IENTAUX MAC
|
|
|
|
LDX $0101 ; Recover alt SP
|
|
|
|
TXS
|
|
|
|
LDX STRTBCKL
|
|
|
|
STX STRTL
|
|
|
|
LDX STRTBCKH
|
|
|
|
STX STRTH
|
|
|
|
EOM
|
|
|
|
|
|
|
|
* Macro called on re-entry to main memory
|
|
|
|
* For use in interrupt handlers (no CLI!)
|
|
|
|
IENTMAIN MAC
|
|
|
|
TXS ; Main SP already in X
|
|
|
|
LDX $C081 ; Bank in ROM
|
|
|
|
LDX $C081
|
|
|
|
EOM
|
|
|
|
|
2021-08-05 23:02:13 -04:00
|
|
|
* Enable writing to main memory (for code running in aux)
|
|
|
|
WRTMAIN MAC
|
2022-09-23 02:21:30 -04:00
|
|
|
PHP
|
2021-08-05 23:02:13 -04:00
|
|
|
SEI ; Keeps IRQ handler easy
|
|
|
|
STA $C004 ; Write to main memory
|
|
|
|
EOM
|
|
|
|
|
2021-08-16 14:58:05 -04:00
|
|
|
* Go back to writing to aux (for code running in aux)
|
2021-08-05 23:02:13 -04:00
|
|
|
WRTAUX MAC
|
|
|
|
STA $C005 ; Write to aux memory
|
2022-09-23 02:21:30 -04:00
|
|
|
PLP ; Normal service resumed
|
2021-08-05 23:02:13 -04:00
|
|
|
EOM
|
|
|
|
|
2021-08-16 14:58:05 -04:00
|
|
|
* Manually enable AltZP (for code running in main)
|
|
|
|
ALTZP MAC
|
2022-09-19 19:25:51 -04:00
|
|
|
PHP
|
2021-08-16 14:58:05 -04:00
|
|
|
SEI ; Disable IRQ when AltZP on
|
|
|
|
LDA $C08B ; R/W LC bank 1
|
|
|
|
LDA $C08B
|
|
|
|
STA $C009 ; Alt ZP and LC
|
|
|
|
EOM
|
|
|
|
|
|
|
|
* Manually disable AltZP (for code running in main)
|
|
|
|
MAINZP MAC
|
|
|
|
STA $C008 ; Main ZP and LC
|
|
|
|
LDA $C081 ; Bank ROM back in
|
|
|
|
LDA $C081
|
2022-09-19 19:25:51 -04:00
|
|
|
PLP ; Turn IRQ back on
|
2021-08-16 14:58:05 -04:00
|
|
|
EOM
|
|
|
|
|
2021-07-30 16:49:34 -04:00
|
|
|
* Code is all included from PUT files below ...
|
2021-08-07 22:48:24 -04:00
|
|
|
* ... order matters!
|
2021-09-06 21:39:36 -04:00
|
|
|
PUT MAINMEM.LDR
|
2021-09-06 21:38:20 -04:00
|
|
|
PUT MAINMEM.MENU
|
2021-09-06 22:28:07 -04:00
|
|
|
PUT MAINMEM.FSEQU
|
|
|
|
PUT MAINMEM.INIT
|
|
|
|
PUT MAINMEM.SVC
|
2021-09-23 16:19:35 -04:00
|
|
|
PUT MAINMEM.GFX
|
2021-09-06 22:28:07 -04:00
|
|
|
PUT MAINMEM.PATH
|
2021-09-09 01:01:39 -04:00
|
|
|
PUT MAINMEM.WILD
|
2021-09-06 22:28:07 -04:00
|
|
|
PUT MAINMEM.LISTS
|
|
|
|
PUT MAINMEM.MISC
|
2021-08-09 21:27:44 -04:00
|
|
|
PUT AUXMEM.MOSEQU
|
|
|
|
PUT AUXMEM.INIT
|
|
|
|
PUT AUXMEM.VDU
|
2021-09-20 14:04:19 -04:00
|
|
|
PUT AUXMEM.GFX
|
2021-08-09 21:27:44 -04:00
|
|
|
PUT AUXMEM.HOSTFS
|
2021-08-14 23:42:06 -04:00
|
|
|
PUT AUXMEM.OSCLI
|
2021-08-09 21:27:44 -04:00
|
|
|
PUT AUXMEM.BYTWRD
|
|
|
|
PUT AUXMEM.CHARIO
|
|
|
|
PUT AUXMEM.MISC
|
|
|
|
|
2021-08-30 19:08:22 -04:00
|
|
|
* Automatically save the object file:
|
2021-08-27 22:47:31 -04:00
|
|
|
SAV APPLECORN
|
2021-08-26 17:36:46 -04:00
|
|
|
|
2021-09-06 23:43:42 -04:00
|
|
|
|
|
|
|
|
2021-09-09 13:38:27 -04:00
|
|
|
|
|
|
|
|
2021-09-10 01:10:16 -04:00
|
|
|
|
|
|
|
|
2021-09-10 14:53:24 -04:00
|
|
|
|
|
|
|
|
2021-09-10 16:11:57 -04:00
|
|
|
|
|
|
|
|
2021-09-12 02:05:17 -04:00
|
|
|
|
|
|
|
|
2021-09-16 23:16:05 -04:00
|
|
|
|
|
|
|
|
2021-09-17 17:51:11 -04:00
|
|
|
|
|
|
|
|
2021-09-21 22:59:11 -04:00
|
|
|
|
2021-09-23 12:59:36 -04:00
|
|
|
|
|
|
|
|
2021-09-29 10:21:04 -04:00
|
|
|
|
|
|
|
|
2021-09-30 16:40:32 -04:00
|
|
|
|
|
|
|
|
2021-10-13 20:57:16 -04:00
|
|
|
|
|
|
|
|
2021-10-14 19:24:26 -04:00
|
|
|
|
|
|
|
|
2021-10-18 18:46:52 -04:00
|
|
|
|
|
|
|
|
2021-10-24 20:38:32 -04:00
|
|
|
|
|
|
|
|
2021-10-26 09:31:34 -04:00
|
|
|
|
|
|
|
|
2021-11-05 19:16:22 -04:00
|
|
|
|
|
|
|
|
2021-11-13 14:57:05 -05:00
|
|
|
|
|
|
|
|
2021-11-14 18:04:10 -05:00
|
|
|
|
|
|
|
|
2021-09-22 18:36:05 -04:00
|
|
|
|
|
|
|
|
2021-09-21 22:59:11 -04:00
|
|
|
|