. = 0x8c080000 .include "regs.s" VIDBEG = 0xa520a000 VIDSTRIDE = 640 * 4 CR = 13 LF = 10 .entry . ; On entry ; ; r15 = conventional stack pointer ; r14 = SCIF base pointer ; r13 = UI value, don't trash ; r12 = UI value, don't trash ; r11 = jump-to-to-return value ; r10 = UI value, don't trash ; ; We use ; r9 = beginning of video memory ; r8 = video memory stride ; r7 = current value ; r6 = loop top mova maintop,r0 mov #0,r7 jmp @r0 mov r0,r6 .align 4 maintop: bsr putchar mov #CR,r1 mov r7,r2 mov #32,r3 1: shll r2 movt r1 bsr putchar add #'0,r1 dt r3 bf 1b mainloop: SETS.L #VIDBEG,r9 SETS.L #VIDSTRIDE,r8 ldc r14,gbr mov.w @(SCFDR2-SCIF_BASE,gbr),r0 SHXR #SCFDR2_RX_SHIFT,r0,r1 tst #SCFDR2_RX_MASK,r0 bt mainloop mov.w @(SCFSR2-SCIF_BASE,gbr),r0 tst #SCFSR2_FER|SCFSR2_PER,r0 mov.b @(SCFRDR2-SCIF_BASE,gbr),r0 extu.b r0,r1 mov.w @(SCLSR2-SCIF_BASE,gbr),r0 mov #0,r0 mov.w r0,@(SCLSR2-SCIF_BASE,gbr) bf mainloop mov r1,r2 mova chartbl,r0 SHLL #2,r2 mov.l @(r0,r2),r2 jmp @r2 nop SETCONST .align 4 chartbl: .long char_default ; 0x00 .long char_default ; 0x01 .long char_default ; 0x02 .long char_default ; 0x03 .long char_default ; 0x04 .long char_default ; 0x05 .long char_default ; 0x06 .long char_default ; 0x07 .long char_default ; 0x08 .long char_default ; 0x09 .long char_default ; 0x0a .long char_default ; 0x0b .long char_default ; 0x0c .long char_default ; 0x0d .long char_default ; 0x0e .long char_default ; 0x0f .long char_default ; 0x10 .long char_default ; 0x11 .long char_default ; 0x12 .long char_default ; 0x13 .long char_default ; 0x14 .long char_default ; 0x15 .long char_default ; 0x16 .long char_default ; 0x17 .long char_default ; 0x18 .long char_default ; 0x19 .long char_default ; 0x1a .long char_esc ; 0x1b .long char_default ; 0x1c .long char_default ; 0x1d .long char_default ; 0x1e .long char_default ; 0x1f .long char_default ; 0x20 = space .long char_set ; 0x21 = ! .long char_default ; 0x22 = " .long char_default ; 0x23 = # .long char_default ; 0x24 = $ .long char_default ; 0x25 = % .long char_default ; 0x26 = & .long char_default ; 0x27 = ' .long char_default ; 0x28 = ( .long char_default ; 0x29 = ) .long char_default ; 0x2a = * .long char_default ; 0x2b = + .long char_default ; 0x2c = , .long char_default ; 0x2d = - .long char_default ; 0x2e = . .long char_default ; 0x2f = / .long char_0 ; 0x30 = 0 .long char_1 ; 0x31 = 1 .long char_default ; 0x32 = 2 .long char_default ; 0x33 = 3 .long char_default ; 0x34 = 4 .long char_default ; 0x35 = 5 .long char_default ; 0x36 = 6 .long char_default ; 0x37 = 7 .long char_default ; 0x38 = 8 .long char_default ; 0x39 = 9 .long char_default ; 0x3a = : .long char_default ; 0x3b = ; .long char_default ; 0x3c = < .long char_default ; 0x3d = = .long char_default ; 0x3e = > .long char_default ; 0x3f = ? .long char_default ; 0x40 = @ .long char_default ; 0x41 = A .long char_default ; 0x42 = B .long char_default ; 0x43 = C .long char_default ; 0x44 = D .long char_default ; 0x45 = E .long char_default ; 0x46 = F .long char_default ; 0x47 = G .long char_default ; 0x48 = H .long char_default ; 0x49 = I .long char_default ; 0x4a = J .long char_default ; 0x4b = K .long char_default ; 0x4c = L .long char_default ; 0x4d = M .long char_default ; 0x4e = N .long char_default ; 0x4f = O .long char_default ; 0x50 = P .long char_default ; 0x51 = Q .long char_default ; 0x52 = R .long char_default ; 0x53 = S .long char_default ; 0x54 = T .long char_default ; 0x55 = U .long char_default ; 0x56 = V .long char_default ; 0x57 = W .long char_default ; 0x58 = X .long char_default ; 0x59 = Y .long char_default ; 0x5a = Z .long char_default ; 0x5b = [ .long char_default ; 0x5c = \ .long char_default ; 0x5d = ] .long char_default ; 0x5e = ^ .long char_default ; 0x5f = _ .long char_default ; 0x60 = ` .long char_default ; 0x61 = a .long char_default ; 0x62 = b .long char_default ; 0x63 = c .long char_default ; 0x64 = d .long char_default ; 0x65 = e .long char_default ; 0x66 = f .long char_default ; 0x67 = g .long char_default ; 0x68 = h .long char_default ; 0x69 = i .long char_default ; 0x6a = j .long char_default ; 0x6b = k .long char_default ; 0x6c = l .long char_default ; 0x6d = m .long char_default ; 0x6e = n .long char_default ; 0x6f = o .long char_default ; 0x70 = p .long char_default ; 0x71 = q .long char_default ; 0x72 = r .long char_default ; 0x73 = s .long char_default ; 0x74 = t .long char_default ; 0x75 = u .long char_default ; 0x76 = v .long char_default ; 0x77 = w .long char_default ; 0x78 = x .long char_default ; 0x79 = y .long char_default ; 0x7a = z .long char_default ; 0x7b = { .long char_default ; 0x7c = | .long char_default ; 0x7d = } .long char_default ; 0x7e = ~ .long char_default ; 0x7f = DEL .long char_default ; 0x80 .long char_default ; 0x81 .long char_default ; 0x82 .long char_default ; 0x83 .long char_default ; 0x84 .long char_default ; 0x85 .long char_default ; 0x86 .long char_default ; 0x87 .long char_default ; 0x88 .long char_default ; 0x89 .long char_default ; 0x8a .long char_default ; 0x8b .long char_default ; 0x8c .long char_default ; 0x8d .long char_default ; 0x8e .long char_default ; 0x8f .long char_default ; 0x90 .long char_default ; 0x91 .long char_default ; 0x92 .long char_default ; 0x93 .long char_default ; 0x94 .long char_default ; 0x95 .long char_default ; 0x96 .long char_default ; 0x97 .long char_default ; 0x98 .long char_default ; 0x99 .long char_default ; 0x9a .long char_default ; 0x9b .long char_default ; 0x9c .long char_default ; 0x9d .long char_default ; 0x9e .long char_default ; 0x9f .long char_default ; 0xa0 = non-break space .long char_default ; 0xa1 = ¡ .long char_default ; 0xa2 = ¢ .long char_default ; 0xa3 = £ .long char_default ; 0xa4 = ¤ .long char_default ; 0xa5 = ¥ .long char_default ; 0xa6 = ¦ .long char_default ; 0xa7 = § .long char_default ; 0xa8 = ¨ .long char_default ; 0xa9 = © .long char_default ; 0xaa = ª .long char_default ; 0xab = « .long char_default ; 0xac = ¬ .long char_default ; 0xad = ­ .long char_default ; 0xae = ® .long char_default ; 0xaf = ¯ .long char_default ; 0xb0 = ° .long char_default ; 0xb1 = ± .long char_default ; 0xb2 = ² .long char_default ; 0xb3 = ³ .long char_default ; 0xb4 = ´ .long char_default ; 0xb5 = µ .long char_default ; 0xb6 = ¶ .long char_default ; 0xb7 = · .long char_default ; 0xb8 = ¸ .long char_default ; 0xb9 = ¹ .long char_default ; 0xba = º .long char_default ; 0xbb = » .long char_default ; 0xbc = ¼ .long char_default ; 0xbd = ½ .long char_default ; 0xbe = ¾ .long char_default ; 0xbf = ¿ .long char_default ; 0xc0 = À .long char_default ; 0xc1 = Á .long char_default ; 0xc2 = Â .long char_default ; 0xc3 = Ã .long char_default ; 0xc4 = Ä .long char_default ; 0xc5 = Å .long char_default ; 0xc6 = Æ .long char_default ; 0xc7 = Ç .long char_default ; 0xc8 = È .long char_default ; 0xc9 = É .long char_default ; 0xca = Ê .long char_default ; 0xcb = Ë .long char_default ; 0xcc = Ì .long char_default ; 0xcd = Í .long char_default ; 0xce = Î .long char_default ; 0xcf = Ï .long char_default ; 0xd0 = Ð .long char_default ; 0xd1 = Ñ .long char_default ; 0xd2 = Ò .long char_default ; 0xd3 = Ó .long char_default ; 0xd4 = Ô .long char_default ; 0xd5 = Õ .long char_default ; 0xd6 = Ö .long char_default ; 0xd7 = × .long char_default ; 0xd8 = Ø .long char_default ; 0xd9 = Ù .long char_default ; 0xda = Ú .long char_default ; 0xdb = Û .long char_default ; 0xdc = Ü .long char_default ; 0xdd = Ý .long char_default ; 0xde = Þ .long char_default ; 0xdf = ß .long char_default ; 0xe0 = à .long char_default ; 0xe1 = á .long char_default ; 0xe2 = â .long char_default ; 0xe3 = ã .long char_default ; 0xe4 = ä .long char_default ; 0xe5 = å .long char_default ; 0xe6 = æ .long char_default ; 0xe7 = ç .long char_default ; 0xe8 = è .long char_default ; 0xe9 = é .long char_default ; 0xea = ê .long char_default ; 0xeb = ë .long char_default ; 0xec = ì .long char_default ; 0xed = í .long char_default ; 0xee = î .long char_default ; 0xef = ï .long char_default ; 0xf0 = ð .long char_default ; 0xf1 = ñ .long char_default ; 0xf2 = ò .long char_default ; 0xf3 = ó .long char_default ; 0xf4 = ô .long char_default ; 0xf5 = õ .long char_default ; 0xf6 = ö .long char_default ; 0xf7 = ÷ .long char_default ; 0xf8 = ø .long char_default ; 0xf9 = ù .long char_default ; 0xfa = ú .long char_default ; 0xfb = û .long char_default ; 0xfc = ü .long char_default ; 0xfd = ý .long char_default ; 0xfe = þ .long char_default ; 0xff = ÿ crlf: .asciz (CR,LF) .align 2 ; Print char from r1. ; Destroys r0, gbr. putchar: ldc r14,gbr 1: mov.w @(SCFDR2-SCIF_BASE,gbr),r0 SHXR #SCFDR2_TX_SHIFT,r0 and #SCFDR2_TX_MASK,r0 cmp/eq #16,r0 bt 1b mov r1,r0 rts mov.b r0,@(SCFTDR2-SCIF_BASE,gbr) ; Print .asciz string pointed to by r0. ; Destroys r0-r3, gbr, pr. putstr: sts pr,r3 bsr 1f mov r0,r2 1: mov.b @r2+,r0 cmp/eq #0,r0 mov r0,r1 bf putchar jmp @r3 nop char_default: mov #7,r1 bra putchar lds r11,pr char_esc: jmp @r11 nop char_0: SHLL #1,r7,r0 jmp @r6 nop char_1: SHLL #1,r7,r0 jmp @r6 add #1,r7 char_set: SETS.L #480,r5 mov r9,r3 2: SETS.L #640,r4 mov r3,r2 1: mov.l r7,@r2 add #4,r2 dt r4 bf 1b dt r5 bf/s 2b add r8,r3 jmp @r6 nop SETCONST