|
|
1.1 ! root 1: ; A very minimalistic TOS ROM replacement, used for testing without real TOS ! 2: ! 3: org $e00000 ! 4: ! 5: TEST_PRG_BASEPAGE equ $1000 ! 6: ! 7: rom_header: ! 8: bra.s start ; Branch to 0xe00030 ! 9: dc.w $0001 ; TOS version ! 10: dc.l start ; Reset PC value ! 11: dc.l rom_header ; Pointer to ROM header ! 12: dc.l TEST_PRG_BASEPAGE ; End of OS BSS ! 13: dc.l start ; Reserved ! 14: dc.l $0 ; Unused (GEM's MUPB) ! 15: dc.l $03032018 ; Fake date ! 16: dc.w $0001 ; PAL flag ! 17: dc.w $4c63 ; Fake DOS date ! 18: dc.l $00000880 ; Fake pointer 1 (mem pool) ! 19: dc.l $00000870 ; Fake pointer 2 (key shift) ! 20: dc.l $00000800 ; Addr of basepage var ! 21: dc.l $0 ; Reserved ! 22: start: ! 23: move #$2700,sr ! 24: reset ! 25: move.b #5,$ffff8001.w ; Fake memory config ! 26: lea $20000,sp ; Set up SSP ! 27: lea $fa0000,a0 ! 28: cmp.l #$abcdef42,(a0) ; Cartridge enabled? ! 29: bne.s no_sys_init ! 30: lea unhandled_error(pc),a1 ! 31: movea.w #8,a0 ; Start with bus error handler ! 32: set_exc_loop: ! 33: move.l a1,(a0)+ ; Set all exception handlers ! 34: cmp.w #$1c0,a0 ! 35: ble.s set_exc_loop ! 36: dc.w $a ; Call SYSINIT_OPCODE to init trap #1 ! 37: ! 38: no_sys_init: ! 39: lea rte_only(pc),a1 ! 40: move.l a1,$68 ; Ignore HBLs ! 41: move.l a1,$72 ; Ignore VBLs ! 42: ! 43: moveq #0,d0 ! 44: movea.l d0,a0 ! 45: movea.l d0,a1 ! 46: move #$0700,sr ; Go to user mode ! 47: lea $18000,sp ; Set up USP ! 48: pea TEST_PRG_BASEPAGE.w ! 49: pea rom_header(pc) ! 50: jmp TEST_PRG_BASEPAGE+$100.w ! 51: ! 52: ! 53: unhandled_err_txt: ! 54: dc.b "ERROR: Unhandled exception!",13,10,0 ! 55: even ! 56: ! 57: unhandled_error: ! 58: pea unhandled_err_txt(pc) ! 59: move.w #9,-(sp) ! 60: trap #1 ; Cconws ! 61: addq.l #6,sp ! 62: ! 63: move.w #1,-(sp) ! 64: move.w #76,-(sp) ! 65: trap #1 ; Pterm ! 66: ! 67: rte_only: ! 68: rte
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.