* Memory layout in main memory * * ; $0000-$00FF Zero page * ; $0100-$01FF Stack * ; $0200-$02FF ProDOS string buffers * ; $0200-$022F Overwritten by RTC routines * ; $0228-$023D DRVBUF1 EQU $023E ; $023E Drive DRVBUF2 EQU $023F ; $022F Prefix on current drive CMDPATH EQU $0280 ; $0280 Path used to start Applecorn * * ; $0300-$03CF File system core workspace * ; $0300-$0382 Filename string buffers MOSFILE1 EQU $0300 ; $0300 length * ; $0301 64 byte string MOSFILE2 EQU $0341 ; $0341 length * ; $0342 64 byte string * ; $0382-$03BD $3C spare bytes * ; * ; $03BE-$03CF: local copy of control block * ; $03BE FPTR FPTR * ; $03BF CHANNEL * ; $03C0 LOAD LOAD ADDR * ; $03C4 EXEC EXEC COUNT * ; $03C8 SIZE START OFFSET * ; $03CC ATTR END * ; $03D0-$03FF: ProDOS vectors, etc. * ; $03D0-$03D2 JMP WARM * ; $03D3-$03D5 JMP WARM * ; $03D6-$03EC ProDOS * ; $03ED-$03DE XFER address * ; $03EF ProDOS * ; $03F0-$03D1 BRKV * ; $03F2-$03D3 RESETV * ; $03F4 RESETV ACK * ; $03F5-$03F7 JMP AMP * ; $03F8-$03FA JMP USER * ; $03FB-$03FD JMP MON * ; $03FE-$03FF IRQV * * EQU $0400 ; $0400- Can't use as ProDOS uses 'hidden' bytes * ; -$07FF within screen for workspace SCREEN EQU $0800 ; $0800-$0BFF half 80-col screen or 40-col screen IOBUF0 EQU $0C00 ; $0C00-$0FFF For loading ROM, OSFILE, *. IOBUF1 EQU $1000 ; $1000-$13FF Four open files for langs IOBUF2 EQU $1400 ; $1400-$17FF IOBUF3 EQU $1800 ; $1800-$1BFF IOBUF4 EQU $1C00 ; $1C00-$1FFF * ; $2000- Code, to do: make code move itself * -$4FFF BLKBUF EQU $5000 ; $5000-$53FF 512-byte buffer plus channel data BLKBUFEND EQU $5200 * To do later: * ; $2000-$3FFF Hi-Res screen 1 * ; $4000-$5FFF Hi-Res screen 2 * ; $6000- available * ; -$95FF available * ; $9600-$BDFF ProDOS buffers * ; $BE00-$BEFF MLI Global workspace * ; $BF00-$BFFF MLI API interface I think $0300-$03DF can be usefully used as filing system workspace, the mainmem copies of the filename and control block, MOSNAME and CBFILE, and later for OSGBPB.