X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=lugburz;a=blobdiff_plain;f=src%2Famiga%2Fintr.s;fp=src%2Famiga%2Fintr.s;h=946b2d85baa1adb82890c4ea87ce1f3298d4b7b1;hp=0000000000000000000000000000000000000000;hb=d166ef254c06ffbf7e4bb0450bd7d52e5ea82b0f;hpb=515574f76f8442b756fbbf87b41e340d6a78bc42 diff --git a/src/amiga/intr.s b/src/amiga/intr.s new file mode 100644 index 0000000..946b2d8 --- /dev/null +++ b/src/amiga/intr.s @@ -0,0 +1,82 @@ +| vi:filetype=gas68k: + .section .text + + .equ DMACON, 0x002 + .equ VPOSR, 0x004 + .equ VHPOSR, 0x006 + .equ COLOR0, 0x180 + + .global exc_init +exc_init: + move.l #exc_addr, 0xc + rts + + .global exc_addr +exc_addr: + ori.w #0x700, %sr + move.l #0xdff000, %a0 + move.w #0x7fff, DMACON(%a0) | clear all DMACON bits + + move.l #str_exc3beg, -(%sp) + jsr ser_print + add.l #4, %sp + + move.l 2(%sp), %d0 + move.l %d0, -(%sp) + bsr print_hex + add.l #4, %sp + + move.l #str_exc3end, -(%sp) + jsr ser_print + add.l #4, %sp + + move.l #3, -(%sp) + +colbars_infloop: + move.l #0xdff000, %a0 + move.w #0, COLOR0(%a0) + move.b #128, %d1 + move.l (%sp), %d2 + +0: move.b VHPOSR(%a0), %d0 + cmp.b %d1, %d0 + bne.s 0b + add.b #4, %d1 + move.w #0xfff, COLOR0(%a0) +1: move.b VHPOSR(%a0), %d0 + cmp.b %d1, %d0 + bne.s 1b + add.b #8, %d1 + move.w #0, COLOR0(%a0) + sub.b #1, %d2 + bne.s 0b + +0: cmp.b #0xff, VHPOSR(%a0) + bne.s 0b + bra.s colbars_infloop + +print_hex: + move.l #hexbuf, %a0 + move.l 4(%sp), %d0 + move.l #8, %d3 +0: rol.l #4, %d0 + move.b %d0, %d1 + and.b #0xf, %d1 + cmp.b #10, %d1 + bhs.s 1f + add.b #'0', %d1 | d1 is in [0, 9] + bra.s 2f +1: add.b #'a'-10, %d1 | d1 is in [10, 15] +2: move.b %d1, (%a0)+ + sub.l #1, %d3 + bne.s 0b + + move.b #0, (%a0)+ + move.l #hexbuf, -(%sp) + jsr ser_print + add.l #4, %sp + rts + +hexbuf: .fill 16 +str_exc3beg: .asciz "Exception 3: address error (" +str_exc3end: .asciz ")\n"