;;; gcc for m6809 : Mar 27 2025 02:43:37 ;;; 4.6.4 (gcc6809lw pl9) ;;; ABI version 1 ;;; -mint16 .module forth.c .area .text _PutRawByte: pshs y,u ldx _cursor stb ,x+ stx _cursor bra L2 L6: ldu #15872 L3: leay 32,u ldd ,y std ,u++ cmpu #16288 ;cmphi: bne L3 L4: ldy #8224 sty ,u++ cmpu #16320 ;cmphi: bne L4 leax -32,x L2: cmpx #16319 ;cmphi: bhi L6 stx _cursor ldb #-1 stb ,x ldx #0 L5: stx 16382 leax 1,x cmpx #256 ;cmphi: bne L5 puls y,u,pc _PutChar: leas -1,s bra L22 L18: ldb #95 L22: stb ,s ldb #32 stb [_cursor] ldb ,s cmpb #10 ;cmpqi: bne L21 bra L19 L14: jsr _PutChar L19: ldx _cursor ldb #32 cmpx #16318 ;cmphi: bls L14 bra L22 L21: ldb ,s cmpb #31 ;cmpqi: bls L18 cmpb #95 ;cmpqi: bhi L16 andb #63 stb ,s bra L23 L16: ldb ,s bmi L17 addb #-96 bra L23 L17: ldb ,s L23: leas 1,s jmp _PutRawByte _PutStr: pshs y,u leay ,x ldu #30 bra L25 L27: jsr _PutChar cmpu #0 ;cmphi: bne L26 ldb #92 puls y,u jmp _PutChar L26: leau -1,u L25: ldb ,y+ bne L27 puls y,u,pc _PutHex: pshs u leas -4,s leau ,x cmpx #15 ;cmphi: bls L29 tfr x,d lsra rorb lsra rorb lsra rorb lsra rorb std 2,s tfr d,x jsr _PutHex L29: tfr u,d anda #0 andb #15 tfr d,x ldb _HexAlphabet,x leas 4,s puls u jmp _PutChar _DivMod10: ldd #0 bra L31 L32: leax -10000,x addd #1000 L31: cmpx #9999 ;cmphi: bhi L32 bra L39 L34: leax -1000,x addd #100 L39: cmpx #999 ;cmphi: bhi L34 bra L40 L36: leax -100,x addd #10 L40: cmpx #99 ;cmphi: bhi L36 bra L41 L38: leax -10,x addd #1 L41: cmpx #9 ;cmphi: bhi L38 std [2,s] tfr x,d ;movlsbqihi: R:x -> R:b rts _PutDec: pshs y,u leas -2,s leau ,s leay ,x cmpx #9 ;cmphi: bls L43 ldd #0 pshs u ;addhi: R:d += R:u addd ,s++ pshs d jsr _DivMod10 ldx ,u jsr _PutDec leas 2,s L43: ldd #0 pshs u ;addhi: R:d += R:u addd ,s++ pshs d leax ,y jsr _DivMod10 addb #48 jsr _PutChar leas 4,s puls y,u,pc _comma: pshs u ldu _here stx ,u leau 2,u stu _here puls u,pc _unnest: ldx _rp ldd ,x leax 2,x stx _rp std _ip rts _semicolon: ldx _unnester jsr _comma ldd #0 std _state rts _docolon: pshs u ldx _rp leau -2,x stu _rp ldd _ip std -2,x ldd _w addd #2 std _ip puls u,pc _type: pshs y,u leay ,x ldu 6,s bra L49 L50: ldb ,y+ jsr _PutChar leau -1,u L49: cmpu #0 ;cmphi: bne L50 puls y,u,pc _parse_word: pshs y,u leas -6,s stx 4,s ldx _num_source stx 2,s ldd _source_adr std ,s ldx _to_in bra L54 L59: leax ,y L54: cmpx 2,s ;cmphi: bhs L60 L52: leay 1,x ldd ,s leau d,x ldb ,u clra ;zero_extendqihi: R:b -> R:d cmpd #32 ;cmphi: ble L59 L60: stx _to_in ldd _source_adr std ,s leau d,x ldy 4,s stu ,y ldu _to_in ldx #0 bra L55 L58: leax 1,x leau 1,u L55: cmpu 2,s ;cmphi: bhs L61 L56: ldd ,s leay d,u ldb ,y clra ;zero_extendqihi: R:b -> R:d tfr d,y cmpd #32 ;cmphi: bgt L58 L61: stu _to_in leas 6,s puls y,u,pc _pop: pshs u ldu _sp ldx ,u leau 2,u stu _sp puls u,pc _store: pshs y,u jsr _pop leay ,x jsr _pop leau ,x stx ,y puls y,u,pc _drop: jmp _pop _push: pshs y,u ldu _sp leay -2,u sty _sp stx -2,u puls y,u,pc _fetch: jsr _pop ldx ,x jmp _push _doliteral: pshs u ldu _ip ldx ,u leau 2,u stu _ip puls u jmp _push _dovariable: ldd _w addd #2 tfr d,x jmp _push _doconstant: ldx _w ldx 2,x jmp _push _divide: pshs u jsr _pop leau ,x jsr _pop pshs u jsr _divhi3 leas 2,s puls u jmp _push _times: pshs y,u jsr _pop leay ,x jsr _pop leau ,x pshs x leax ,y jsr _mulhi3 leas 2,s puls y,u jmp _push _minus: pshs u jsr _pop leau ,x jsr _pop tfr x,d pshs u ;subhi: R:d -= R:u subd ,s++ tfr d,x puls u jmp _push _plus: pshs y,u jsr _pop leay ,x jsr _pop leau ,x tfr y,d leax d,x puls y,u jmp _push _depth: ldd #_stack+200 subd _sp ;subhi: R:d -= _sp asra rorb tfr d,x jmp _push _dup: ldx [_sp] jmp _push _do_finish: ldd #1 std _finished rts _ctype: pshs u leau ,x jsr _strlen pshs x leax ,u jsr _type leas 2,s puls u,pc LC0: .ascii "\nok \0" LC1: .ascii "Not found: \0" _loop: pshs y,u leas -15,s ldx #LC0 jsr _ctype ldy _source_len ldx _source_adr stx 7,s ldu #0 stu 3,s jmp L130 L129: ldb _gMono L80: cmpb _gMono ;cmpqi: beq L80 ldb _gKern+4 ldu #127 tstb ;cmpqi:(ZERO) lbeq L81 ldx #8 ldb #1 stb ,s L88: ldb ,s comb stb -254 ldb -256 comb andb #127 lbeq L82 stb 5,s ldb #127 stb -254 ldb -256 stb 2,s com 2,s ldb 2,s andb #64 stb 9,s clr 2,s L84: ldb ,s clra ;zero_extendqihi: R:b -> R:d std 11,s anda #0 andb #1 cmpd #0 ;cmphi: bne L83 lsr ,s inc 2,s ldb 2,s cmpb #8 ;cmpqi: bne L84 ldb #-1 stb 2,s L83: clr ,s L86: ldb 5,s clra ;zero_extendqihi: R:b -> R:d std 11,s anda #0 andb #1 cmpd #0 ;cmphi: bne L85 lsr 5,s inc ,s ldb ,s cmpb #8 ;cmpqi: bne L86 ldb #-1 stb ,s L85: ldb ,s aslb aslb aslb addb 2,s stb ,s ldb 9,s beq L87 ldb #-128 orb ,s stb ,s L87: ldb ,s clra ;zero_extendqihi: R:b -> R:d tfr d,u bra L81 L82: asl ,s leax -1,x cmpx #0 ;cmphi: lbne L88 ldu #127 L81: tfr u,d eora _prev_code eorb _prev_code+1 anda #0 andb #127 cmpd #0 ;cmphi: lbeq L129 stu _prev_code cmpu #127 ;cmphi: lbeq L129 tfr u,d ;movlsbqihi: R:u -> R:b stb ,s andb #127 stb 2,s ldx #_CocoKeyMap ldb ,s bpl L91 ldx #_CocoKeyMapShifted L91: ldb 2,s cmpb #49 ;cmpqi: bhi L118 clra ;zero_extendqihi: R:b -> R:d std ,s leax d,x ldb ,x stb ,s beq L92 jsr _PutChar ldb ,s cmpb #10 ;cmpqi: beq L94 cmpb #13 ;cmpqi: beq L94 cmpb #8 ;cmpqi: bne L92 leay 1,y ldd 3,s addd #-1 bra L140 L118: clr ,s L92: leay -1,y ldd 7,s addd 3,s tfr d,x ldb ,s stb ,x ldd 3,s addd #1 L140: std 3,s L130: cmpy #0 ;cmphi: lbne L129 L94: ldu 3,s stu _num_source ldd #0 std _to_in jmp L131 L113: ldx 13,s stx 5,s ldy _last ldu 3,s jmp L97 L105: ldb 2,y stb 7,s clra ;zero_extendqihi: R:b -> R:d std ,s anda #0 andb #15 pshs u ;cmphi: R:u with R:d cmpd ,s++ ;cmphi: lbne L98 leax 3,y stx 11,s ldx 5,s stx 9,s stu 3,s leax ,u L101: ldu 9,s leau 1,u stu 9,s leau -1,u ldb ,u+ stb ,s ldu 11,s leau 1,u stu 11,s leau -1,u ldb ,u+ stb 2,s addb #-97 cmpb #25 ;cmpqi: bhi L99 ldb 2,s addb #-32 stb 2,s L99: ldb ,s addb #-97 cmpb #25 ;cmpqi: bhi L100 ldb ,s addb #-32 stb ,s L100: leax -1,x ldb 2,s cmpb ,s ;cmpqi: bne L139 cmpx #0 ;cmphi: bne L101 bra L142 L139: ldu 3,s L98: ldy ,y bra L97 L142: leax 18,y ldu #1 ldb 7,s bmi L104 ldu #-1 bra L104 L97: cmpy #0 ;cmphi: lbne L105 bra L143 L104: ldy _state beq L107 cmpu #-1 ;cmphi: lbeq L141 L107: stx _executer ldu #_executer stu _ip ldd #0 std _finished L109: ldu _ip ldx ,u stx _w leau 2,u stu _ip jsr [,x] ldx _finished beq L109 jmp L131 L112: ldy 9,s leay 1,y sty 9,s leay -1,y ldb ,y+ clra ;zero_extendqihi: R:b -> R:d tfr d,u leay -48,u cmpy #0 ;cmphi: blt L110 leax -1,x cmpy #9 ;cmphi: ble L111 bra L110 L143: ldu 5,s ldx 3,s ldd #0 std ,s stu 9,s bra L112 L110: ldx #LC1 jsr _ctype ldx 3,s pshs x ldx 7,s jsr _type ldb #10 jsr _PutChar ldy _num_source sty _to_in leas 2,s bra L131 L114: ldx _dolit jsr _comma ldx ,s L141: jsr _comma bra L131 L145: ldx ,s jsr _push L131: leax 13,s jsr _parse_word stx 3,s lbne L113 bra L144 L111: ldd ,s aslb rola std ,s aslb rola aslb rola addd ,s leay d,y sty ,s cmpx #0 ;cmphi: lbne L112 ldx _state bne L114 bra L145 L144: leas 15,s puls y,u,pc LC2: .ascii "End of line while parsing word\n\0" _safe_parse_word: pshs u jsr _parse_word leau ,x cmpx #0 ;cmphi: bne L147 ldx #LC2 jsr _ctype L147: leax ,u puls u,pc _Printf: pshs y,u leas -4,s leau 12,s ldy 10,s ldx #31 stx 2,s jmp L149 L161: ldd 2,s addd #-1 std 2,s bne L150 ldb #92 jsr _PutChar jmp L148 L150: ldb ,s cmpb #31 ;cmpqi: bhi L152 ldb #10 bra L162 L152: ldb ,s cmpb #37 ;cmpqi: beq L154 L162: jsr _PutChar sty ,s bra L153 L154: leax 1,y stx ,s ldb 1,y cmpb #115 ;cmpqi: beq L157 bhi L160 cmpb #100 ;cmpqi: bne L155 bra L158 L160: cmpb #117 ;cmpqi: beq L158 cmpb #120 ;cmpqi: bne L155 bra L164 L158: leay 2,u ldx ,u jsr _PutDec bra L163 L164: leay 2,u ldx ,u jsr _PutHex bra L163 L157: leay 2,u ldx ,u jsr _PutStr L163: leau ,y bra L153 L155: jsr _PutChar L153: ldx ,s leay 1,x L149: ldb ,y stb ,s lbne L161 L148: leas 4,s puls y,u,pc LC3: .ascii " => %d \0" _print: jsr _pop pshs x ldx #LC3 stx ,--s jsr _Printf leas 4,s rts LC4: .ascii " is too long\n\0" _header: pshs y,u leas -4,s ldd 10,s std ,s ldy 12,s sty 2,s cmpd #15 ;cmphi: bgt L167 ldy _here bra L168 L167: ldd ,s pshs d jsr _type ldx #LC4 leas 6,s puls y,u jmp _ctype L168: leau ,y tfr y,d anda #0 andb #1 leay 1,y cmpd #0 ;cmphi: bne L168 leay 20,u sty _here ldd _last std ,u stu _last ldd ,s stb 2,u ;movlsbqihi: R:d -> 2,u leay 3,u bra L169 L170: ldb ,x+ stb ,y+ L169: ldd ,s addd #-1 std ,s cmpd #-1 ;cmphi: bne L170 ldx 2,s stx 18,u leas 4,s puls y,u,pc _cheader: pshs y,u leau ,x jsr _strlen ldy 6,s pshs x,y leax ,u jsr _header leas 4,s puls y,u,pc LC5: .ascii "-- Hello FORTH -- \0" LC6: .ascii "exit\0" LC7: .ascii ";\0" LC8: .ascii ":\0" LC9: .ascii "variable\0" LC10: .ascii "constant\0" LC11: .ascii "(literal)\0" LC12: .ascii "+\0" LC13: .ascii "-\0" LC14: .ascii "*\0" LC15: .ascii "/\0" LC16: .ascii ".\0" LC17: .ascii "drop\0" LC18: .ascii "dup\0" LC19: .ascii "depth\0" LC20: .ascii "@\0" LC21: .ascii "!\0" LC22: .ascii "bye\0" .area .text.startup .globl _main _main: pshs u ;----- asm ----- ; 5 "../kernel/game_postlude.h" 1 .globl __n1pre_entry ;--- end asm --- ldx #__n1pre_entry stx 0 ;----- asm ----- ; 8 "../kernel/game_postlude.h" 1 .globl __n1pre_final ;--- end asm --- ldu #__n1pre_final stu 0 ;----- asm ----- ; 11 "../kernel/game_postlude.h" 1 .globl __n1pre_final_startup ;--- end asm --- ldx #__n1pre_final_startup stx 0 clrb ldx #15872 jsr _gTextScreen ldx #15872 L174: ldu #12079 stu ,x++ cmpx #16384 ;cmphi: bne L174 ldx #16288 stx _cursor ldb #-1 stb 16288 ldx #LC5 stx ,--s jsr _Printf ldu #_origin stu _here ldx #_unnest stx ,--s ldx #LC6 jsr _cheader ldd _last addd #18 std _unnester ldx #_semicolon stx ,--s ldx #LC7 jsr _cheader ldx _last ldb 2,x orb #-128 stb 2,x ldu #_colon stu ,--s ldx #LC8 jsr _cheader leas 8,s ldx #_variable stx ,--s ldx #LC9 jsr _cheader ldu #_constant stu ,--s ldx #LC10 jsr _cheader ldx #_doliteral stx ,--s ldx #LC11 jsr _cheader ldd _last addd #18 std _dolit ldx #_plus stx ,--s ldx #LC12 jsr _cheader leas 8,s ldu #_minus stu ,--s ldx #LC13 jsr _cheader ldx #_times stx ,--s ldx #LC14 jsr _cheader ldu #_divide stu ,--s ldx #LC15 jsr _cheader ldx #_print stx ,--s ldx #LC16 jsr _cheader leas 8,s ldu #_drop stu ,--s ldx #LC17 jsr _cheader ldx #_dup stx ,--s ldx #LC18 jsr _cheader ldu #_depth stu ,--s ldx #LC19 jsr _cheader ldx #_fetch stx ,--s ldx #LC20 jsr _cheader leas 8,s ldu #_store stu ,--s ldx #LC21 jsr _cheader ldx #_bye stx ,--s ldx #LC22 jsr _cheader ldu #_return_stack+200 stu _rp ldd #_stack+200 std _sp ldd #-2 std _source_id ldx #_tib stx _source_adr ldu #132 stu _source_len ldd #0 std _num_source std _to_in ldx #__n1pre_final_startup stx ,--s ldu #__n1pre_final stu ,--s ldx #_loop jsr _xAfterSetup leas 8,s ldx #0 puls u,pc .area .text _variable: pshs u leas -2,s leax ,s jsr _safe_parse_word cmpx #0 ;cmphi: beq L176 ldu #_dovariable pshs x,u ldx 4,s jsr _header ldx #0 jsr _comma leas 4,s L176: leas 2,s puls u,pc _constant: pshs u leas -2,s leax ,s jsr _safe_parse_word cmpx #0 ;cmphi: beq L178 ldu #_doconstant pshs x,u ldx 4,s jsr _header jsr _pop jsr _comma leas 4,s L178: leas 2,s puls u,pc _colon: pshs u leas -2,s leax ,s jsr _safe_parse_word cmpx #0 ;cmphi: beq L180 ldu #_docolon pshs x,u ldx 4,s jsr _header ldd #1 std _state leas 4,s L180: leas 2,s puls u,pc LC23: .ascii "** EXIT %d. (HIT BREAK) \n\0" .globl __exit __exit: pshs u leau ,x ldx #LC23 jsr _PutStr bra L183 L184: stu 16352 leau 1,u L183: ldb _gKern+5 bne L184 L186: bra L186 .globl _exit _exit: pshs u leau ,x pshs x ldx #LC23 stx ,--s jsr _Printf leas 4,s bra L188 L189: stu 16352 leau 1,u L188: ldb _gKern+5 bne L189 L191: bra L191 _bye: ldx #0 jmp _exit LC24: .ascii "** ABORT. \n\0" .globl _abort _abort: ldx #LC24 stx ,--s jsr _Printf ldx #13 jmp _exit .globl _fputc _fputc: tfr x,d ;movlsbqihi: R:x -> R:b jsr _PutChar ldx #0 rts .globl _isspace _isspace: pshs u ldu #1 cmpx #32 ;cmphi: ble L196 ldu #0 L196: leax ,u puls u,pc .area .bss _cursor: .blkb 2 .area .text _HexAlphabet: .ascii "0123456789ABCDEF\0" .area .text.entry __n1pre_entry: .byte 126 .word _main .area .final __n1pre_final: .word -20754 .area .final.setup __n1pre_final_startup: .word -20753 .area .bss _rp: .blkb 2 .area .data.more _return_stack: zmb 210 ;skip space .area .bss _sp: .blkb 2 .area .data.more _stack: zmb 210 ;skip space .area .bss _source_id: .blkb 2 _source_adr: .blkb 2 .area .data.more _tib: zmb 132 ;skip space .area .bss _source_len: .blkb 2 _num_source: .blkb 2 _to_in: .blkb 2 _prev_code: .blkb 2 .area .text _CocoKeyMapShifted: .ascii "@ABCDEFGHIJKLMNOPQRSTUVWXYZ\0\0\010\0 \0!\042#$%&'()*+<=>?" .ascii "\n\0" _CocoKeyMap: .ascii "@ABCDEFGHIJKLMNOPQRSTUVWXYZ\0\0\010\0 0123456789:;,-./" .ascii "\n\0" .area .bss _last: .blkb 2 _state: .blkb 2 .area .data _executer: .word 0 .word _finisher .area .bss _ip: .blkb 2 _finished: .blkb 2 _w: .blkb 2 _dolit: .blkb 2 _here: .blkb 2 .area .data.more _origin: zmb 800 ;skip space .area .bss _unnester: .blkb 2 .area .data _finisher: .word _do_finish .area .absolute .globl _gAlloc64 _gAlloc64 EQU $0B89 .globl _gConfig _gConfig EQU $0607 .globl _gFatal _gFatal EQU $0AB8 .globl _gFatalFIRQ _gFatalFIRQ EQU $0B09 .globl _gFatalNMI _gFatalNMI EQU $0B1F .globl _gFatalSWI1 _gFatalSWI1 EQU $0B63 .globl _gFatalSWI2 _gFatalSWI2 EQU $0B4D .globl _gFatalSWI3 _gFatalSWI3 EQU $0B36 .globl _gFree64 _gFree64 EQU $06DF .globl _gIrqRestore _gIrqRestore EQU $06D4 .globl _gIrqSaveAndDisable _gIrqSaveAndDisable EQU $06C7 .globl _gKern _gKern EQU $0657 .globl _gModeScreen _gModeScreen EQU $0A81 .globl _gMono _gMono EQU $0020 .globl _gNetworkLog _gNetworkLog EQU $0D82 .globl _gPMode1Screen _gPMode1Screen EQU $0A54 .globl _gReceiveCast64 _gReceiveCast64 EQU $074C .globl _gScore _gScore EQU $060B .globl _gSendCast _gSendCast EQU $0DB8 .globl _gTextScreen _gTextScreen EQU $09BE .globl _gWall _gWall EQU $0637 .globl _memcpy _memcpy EQU $08C5 .globl _memcpy_words _memcpy_words EQU $0769 .globl _memset _memset EQU $089F .globl _memset_words _memset_words EQU $0857 .globl _strlen _strlen EQU $08E7 .globl _xAfterSetup _xAfterSetup EQU $06FF .globl _xSendControlPacket _xSendControlPacket EQU $0D9B