X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fatari%2Fcrt0.s;h=0ea6e390f0f750fbf47032d77fe58aaa55dd1f68;hb=91b9451c60682c0fda984750406d58b1b019f87e;hp=db8a595e30ea3a662092d0d026548face0e9552a;hpb=d3d7499faa74db42edb71c7ee3f3fa16e7b73810;p=cc65 diff --git a/libsrc/atari/crt0.s b/libsrc/atari/crt0.s index db8a595e3..0ea6e390f 100644 --- a/libsrc/atari/crt0.s +++ b/libsrc/atari/crt0.s @@ -8,18 +8,19 @@ ; Stefan Haubenthal ; - .export _exit .export __STARTUP__ : absolute = 1 ; Mark as startup + .export _exit, start .import initlib, donelib .import callmain, zerobss - .import __STARTUP_LOAD__, __BSS_LOAD__ .import __RESERVED_MEMORY__ .import __RAM_START__, __RAM_SIZE__ -.if .defined(__ATARIXL__) +.ifdef __ATARIXL__ + .import __STACKSIZE__ .import sram_init .import scrdev .import findfreeiocb + .forceimport sramprep ; force inclusion of the "shadow RAM preparation" load chunk .include "save_area.inc" .endif @@ -27,47 +28,41 @@ .include "atari.inc" ; ------------------------------------------------------------------------ -; EXE header - -.segment "EXEHDR" - - .word $FFFF - -.if .defined(__ATARIXL__) -.segment "MAINHDR" -.endif - - .word __STARTUP_LOAD__ - .word __BSS_LOAD__ - 1 - -; ------------------------------------------------------------------------ -; Actual code .segment "STARTUP" rts ; fix for SpartaDOS / OS/A+ - ; they first call the entry point from AUTOSTRT and - ; then the load addess (this rts here). + ; They first call the entry point from AUTOSTRT; and + ; then, the load address (this rts here). ; We point AUTOSTRT directly after the rts. ; Real entry point: -.if .defined(__ATARIXL__) +start: + +.ifdef __ATARIXL__ jsr sram_init .endif -; Clear the BSS data +; Clear the BSS data. jsr zerobss -; Setup the stack +; Set up the stack. tsx - stx spsave + stx SP_save -.if .not .defined(__ATARIXL__) +.ifdef __ATARIXL__ -; Report memory usage + lda #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__) + sta sp + lda #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__) + sta sp+1 + +.else + +; Report the memory usage. lda APPMHI sta APPMHI_save ; remember old APPMHI value @@ -78,74 +73,67 @@ lda MEMTOP sbc #<__RESERVED_MEMORY__ sta APPMHI ; initialize our APPMHI value - sta sp ; setup runtime stack part 1 + sta sp ; set up runtime stack part 1 lda MEMTOP+1 sbc #>__RESERVED_MEMORY__ sta APPMHI+1 - sta sp+1 ; setup runtime stack part 2 - -.else - - lda #<(__RAM_START__ + __RAM_SIZE__ - 1) - sta sp - lda #>(__RAM_START__ + __RAM_SIZE__ - 1) - sta sp+1 + sta sp+1 ; set up runtime stack part 2 .endif -; Call module constructors +; Call the module constructors. jsr initlib -; Set left margin to 0 +; Set the left margin to 0. lda LMARGN - sta old_lmargin + sta LMARGN_save ldy #0 sty LMARGN -; Set keyb to upper/lowercase mode +; Set the keyboard to upper-/lower-case mode. ldx SHFLOK - stx old_shflok + stx SHFLOK_save sty SHFLOK -; Initialize conio stuff +; Initialize the conio stuff. - dey ; Set X to $FF - sty CH + dey ; Set Y to $FF + sty CH ; remove keypress which might be in the input buffer -; Push arguments and call main +; Push the command-line arguments; and, call main(). jsr callmain -; Call module destructors. This is also the _exit entry. +; Call the module destructors. This is also the exit() entry. _exit: jsr donelib ; Run module destructors -; Restore system stuff +; Restore the system stuff. - ldx spsave + ldx SP_save txs ; Restore stack pointer -; Restore left margin +; Restore the left margin. - lda old_lmargin + lda LMARGN_save sta LMARGN -; Restore kb mode +; Restore the kb mode. - lda old_shflok + lda SHFLOK_save sta SHFLOK -; Restore APPMHI +; Restore APPMHI. lda APPMHI_save sta APPMHI lda APPMHI_save+1 sta APPMHI+1 -.if .defined(__ATARIXL__) +.ifdef __ATARIXL__ ; Atari XL target stuff... @@ -159,7 +147,9 @@ _exit: jsr donelib ; Run module destructors sta MEMTOP+1 -; ... issue a GRAPHICS 0 call (copied'n'pasted from TGI drivers) +; Issue a GRAPHICS 0 call (copied'n'pasted from the TGI drivers), in +; order to restore screen memory to its default location just +; before the ROM. jsr findfreeiocb @@ -179,19 +169,21 @@ _exit: jsr donelib ; Run module destructors lda #0 sta ICBLH,x jsr CIOV_org -; add error checking here... +; No error checking here, shouldn't happen(TM); and, no way to +; recover anyway. + lda #CLOSE sta ICCOM,x jsr CIOV_org .endif -; Turn on cursor +; Turn on the cursor. ldx #0 stx CRSINH -; Back to DOS +; Back to DOS. rts @@ -201,15 +193,9 @@ _exit: jsr donelib ; Run module destructors .bss -spsave: .res 1 -old_shflok: .res 1 -old_lmargin: .res 1 -.if .not .defined(__ATARIXL__) +SP_save: .res 1 +SHFLOK_save: .res 1 +LMARGN_save: .res 1 +.ifndef __ATARIXL__ APPMHI_save: .res 2 .endif - - -.segment "AUTOSTRT" - .word RUNAD ; defined in atari.inc - .word RUNAD+1 - .word __STARTUP_LOAD__ + 1