SECTION .text ORG $00000000 ; Define the initial stack pointer and reset vector DC.L $00108000 ; Initial Stack Pointer (example address, adjust as needed) DC.L _start ; Reset vector pointing to the program entry point ORG $00000100 SWWAIT EQU 100 DUART1 EQU $00080000 DUART2 EQU $00080020 DUART3 EQU $00080040 DISPLAY_ADDR EQU $800A0 ACR EQU $09 CTUR EQU $0D CTLR EQU $0F OPCR EQU $1B SOP EQU $1D ROP EQU $1F IP EQU $1B OS_DEST EQU $00108000 OSLEN EQU 43915 _start: ; Configure DUART3 for timer mode ; OPCR = $04 (Timer on O/P 3) ; ACR = $60 (Timer mode, x1 prescaler) ; CTUR = $40 ; CTLR = $00 MOVE.B #$04,(DUART3+OPCR).L MOVE.B #$60,(DUART3+ACR).L MOVE.B #$40,(DUART3+CTUR).L MOVE.B #$00,(DUART3+CTLR).L ; --- Beep #1 --- ; Turn buzzer on MOVE.B #$08,(DUART2+ROP).L ; Wait for CART LOAD to be pressed waitcl: MOVE.B #$03,(DUART3+SOP).L ; Switch Bank 2 MOVE.B#$02,(DUART3+ROP).L MOVE.L#SWWAIT,d0 w3:SUBI.L#1,d0 BNE.Sw3; BTST #02,(DUART3+IP) BEQ.Swaitcl ; Turn buzzer off MOVE.B #$08,(DUART2+SOP).L ; Short pause ~1s MOVE.L #$0007D00,D0 short_delay1: SUBI.L #1,D0 BNE.S short_delay1 ; --- Beep #2 --- MOVE.B #$08,(DUART2+ROP).L MOVE.L #$003D090,D0 long_delay2: SUBI.L #1,D0 BNE.S long_delay2 MOVE.B #$08,(DUART2+SOP).L MOVE.L #$0007D00,D0 short_delay2: SUBI.L #1,D0 BNE.S short_delay2 ; --- Beep #3 --- MOVE.B #$08,(DUART2+ROP).L MOVE.L #$003D090,D0 long_delay3: SUBI.L #1,D0 BNE.S long_delay3 MOVE.B #$08,(DUART2+SOP).L MOVE.L #$0007D00,D0 short_delay3: SUBI.L #1,D0 BNE.S short_delay3 display: MOVE.B #$38,(DUART1+ROP).L MOVE.B #$08,(DUART1+SOP).L LEA DISPLAY_ADDR,A0 MOVE.B #$10,(A0) ADDQ.L #2,A0 MOVE.B #$10,(A0) ADDQ.L #2,A0 MOVE.B #$7E,(A0) ADDQ.L #2,A0 MOVE.B #$10,(A0) ADDQ.L #2,A0 MOVE.B #$7E,(A0) ADDQ.L #2,A0 MOVE.B #$10,(A0) ADDQ.L #2,A0 MOVE.B #$10,(A0) ADDQ.L #2,A0 MOVE.B #$00,(A0) copy_os: LEA OS_BIN_START,A0 ; EPROM source LEA OS_DEST,A1 ; RAM destination MOVE.L #OSLEN,D0 ; number of bytes to copy loop_copy: MOVE.B (A0)+,(A1)+ SUBQ.L #1,D0 BNE.S loop_copy RTS done: BRA.S done SECTION .osdata OS_BIN_START: INCBIN "VX15B.BIN" OS_BIN_END: END