OpenCores
URL https://opencores.org/ocsvn/thor/thor/trunk

Subversion Repositories thor

[/] [thor/] [trunk/] [FT64/] [software/] [boot/] [boottc.asm] - Rev 45

Compare with Previous | Blame | View Log

; N4V128Sys bootrom - (C) 2017 Robert Finch, Waterloo
;
; This file is part of N4V128Sys
;
; how to build:
; 1. assemble using "A64 +gF .\boot\boot.asm"
; 2. copy boot.ve0 to the correct directory if not already there
;
;------------------------------------------------------------------------------
;
; system memory map
;
;
; 00000000 +----------------+
;          |                |
;          |                |
;          |                |
;          |                |
;          :  dram memory   : 512 MB
;          |                |
;          |                |
;          |                |
;          |                |
; 20000000 +----------------+
;          |                |
;          :     unused     :
;          |                |
; FF400000 +----------------+
;          |   scratchpad   | 8 kB
; FF402000 +----------------+
;          |     unused     |
; FFD00000 +----------------+
;          |                |
;          :    I/O area    : 1.0 M
;          |                |
; FFE00000 +----------------+
;          |                |
;          :     unused     :
;          |                |
; FFFC0000 +----------------+
;          |                |
;          :    boot rom    :
;          |                |
; FFFFFFFF +----------------+
;
;
;
LEDS            equ             $FFDC0600
BUTTONS         equ             $FFDC0600
SCRATCHPAD      equ             $FF400000
AVIC            equ             $FFDCC000
TC1                     equ             $FFD0DF00

WHITE           equ             $7FFF
MEDBLUE         equ             $000F
fgcolor         equ             SCRATCHPAD
bkcolor         equ             fgcolor + 4
_randStream     equ             SCRATCHPAD + 16
_DBGCursorCol   equ     _randStream + 8
_DBGCursorRow   equ     _DBGCursorCol + 4
_DBGAttr        equ             _DBGCursorRow + 4
milliseconds    equ             _DBGAttr + 4

; Help the assembler out by telling it how many bits are required for code
; addresses
                code    18 bits
                org             $FFFC0000               ; start of ROM memory space
                jmp             brkrout                 ; jump to the exception handler
                org             $FFFC0100               ; The PC is set here on reset
                jmp             start                   ; Comment out this jump to test i-cache
test_icache:
        ; This seems stupid but maybe necessary. Writes to r0 always cause it to
        ; be loaded with the value zero regardless of the value written. Readback
        ; should then always be a zero. The only case it might not be is at power
        ; on. At power on the reg should be zero, but let's not assume that and
        ; write a zero to it.
                and             r0,r0,#0                ; cannot use LDI which does an or operation
                ; set trap vector
                ldi             r1,#$FFFC0000
                csrrw   r0,#$30,r1
                ldi             r31,#$FF400FF8  ; set stack pointer
                sei             #0
        ; Seed random number generator
                ldi             r6,#$FFDC0000
                sh              r0,$0C04[r6]                    ; select stream #0
                ldi             r1,#$88888888
                sh              r1,$0C08[r6]                    ; set initial m_z
                ldi             r1,#$01234567
                sh              r1,$0C0C[r6]                    ; set initial m_w
.st4:
        ; Get a random number
                sh              r0,$FFDC0C04    ; set the stream
                nop                                             ; delay a wee bit
                lhu             r1,$FFDC0C00    ; get a number
                sh              r0,$FFDC0C00    ; generate next number

        ; convert to random address
                shl             r1,r1,#2
                and             r1,r1,#$1FFC
                add             r1,r1,#$FF401000        ; scratchram address
                
        ; Fill an area with test code
                ldi             r2,#15                  ; number of ops - 1
                ldi             r3,#.st2                ; address of test routine copy
.st3:
                lhu             r4,[r3+r2*4]    ; move from boot rom to
                sh              r4,[r1+r2*4]    ; scratch ram
                sub             r2,r2,#1
                bge             r2,r0,.st3
        
        ; Now jump to the test code
                cache   #3,[r1]                 ; invalidate the cache
                jal             r29,[r1]
                ldi             r2,#14                  ; this is the value that should be returned
                cmp             r1,r1,r2
                bne             r1,r0,.st5
                bra             .st4

        ; Display fail code
.st5:
                ldi             r1,#$FA
                sb              r1,$FFDC0600
                bra             .st5

; Test code accumulates for 16 instructions, sum should be 14
                
.st2:
                ldi             r1,#0
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                add             r1,r1,#1                
                ret

start:
        ; This seems stupid but maybe necessary. Writes to r0 always cause it to
        ; be loaded with the value zero regardless of the value written. Readback
        ; should then always be a zero. The only case it might not be is at power
        ; on. At power on the reg should be zero, but let's not assume that and
        ; write a zero to it.
                and             r0,r0,#0                ; cannot use LDI which does an or operation
                bra             .st1
.st2:
                ldi             r2,#$AA
                sb              r2,LEDS                 ; write to LEDs
                bra             .st2

        ; First thing to do, LED status indicates core at least hit the reset
        ; vector.
.st1:
                ldi             r2,#$FF
                sb              r2,LEDS                 ; write to LEDs

                ; set trap vector
                ldi             r1,#$FFFC0000
                csrrw   r0,#$30,r1
                ldi             r31,#$FF401FF8  ; set stack pointer
                
                ; Enable interrupts
                sei             #0
                
                ldi             r1,#$00000              ; turn on SMT use $10000
                csrrs   r0,#0,r1
                add             r0,r0,#0                ; fetch adjustment ramp
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                csrrd   r1,#$044,r0             ; which thread is running ?
                bfextu  r1,r1,#24,#24   
                bne             r1,r0,.st2

                call    calltest3

;               ldi             r1,#16
;               vmov    vl,r1
;               ldi             r1,#$FFFF
;               vmov    vm0,r1
;               sync
;               lv              v1,vec1data
;               lv              v2,vec2data
;               vadd    v3,v1,v2,vm0

                ldi             r1,#MEDBLUE     
                sh              r1,bkcolor              ; set text background color
                ldi             r1,#WHITE
                sh              r1,fgcolor              ; set foreground color

        ldi             r1,#$AAAA5555   ; pick some data to write
        ldi             r3,#0
        ldi             r4,#start1
start1:
        shr             r2,r1,#12
        sb              r2,LEDS                 ; write to LEDs
        add             r1,r1,#1
        add             r3,r3,#1
        cmp             r2,r3,#10       ; stop after a few cycles
;       bne             r2,r0,r4

        ; Initialize PRNG
                sw              r0,_randStream
                ldi             r6,#$FFDC0000
                sh              r0,$0C04[r6]                    ; select stream #0
                ldi             r1,#$88888888
                sh              r1,$0C08[r6]                    ; set initial m_z
                ldi             r1,#$01234567
                sh              r1,$0C0C[r6]                    ; set initial m_w

                ldi             r2,#6
                sb              r2,LEDS                 ; write to LEDs
                jal             r29,clearTxtScreen
                ldi             r4,#$0025
                sb              r4,LEDS
                jmp             _BIOSMain
start3:
                bra             start3

brkrout:
;               sub             sp,sp,#16
;               sw              r1,[sp]                 ; save off r1
;               sw              r23,8[sp]               ; save off assembler's working reg
                add             r0,r0,#0
        ; Set the interrupt level back to the interrupting level
        ; to allow nesting higher priority interrupts
                csrrd   r1,#$044,r0
                bfextu  r1,r1,#40,#42
                ;sei            r1
                lh              r1,milliseconds
                add             r1,r1,#1
                sh              r1,milliseconds
                ldi             r1,#$20000              ; sequence number reset bit
                csrrs   r0,#0,r1                ; pulse sn reset bit
                add             r0,r0,#0                ; now a ramp of instructions
                add             r0,r0,#0                ; that don't depend on sequence
                add             r0,r0,#0                ; number to operate properly
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
                add             r0,r0,#0
;               lw              r1,[sp]                 ; get r1 back
;               lw              r23,8[sp]
;               add             sp,sp,#16
                rti

calltest:
        sw              r1,$FF400000            ; 1
        add             r1,r1,#2                        ; 2
        lw              r1,$FF400000            ; 3
        ret

calltest1:
        sub             sp,sp,#8
        sw              lr,[sp]
        call    calltest
        lw              lr,[sp]
        add             sp,sp,#8
        ret

calltest2:
        sub             sp,sp,#8
        sw              lr,[sp]
        call    calltest1
        lw              lr,[sp]
        add             sp,sp,#8
        ret

calltest3:
        sub             sp,sp,#8
        sw              lr,[sp]
        call    calltest2
        lw              lr,[sp]
        add             sp,sp,#8
        ret

;------------------------------------------------------------------------------
; Set400x300 video mode.
;------------------------------------------------------------------------------

_Set400x300:
                sub             sp,sp,#8
                sw              r6,[sp]
                ldi             r6,#AVIC
                ldi             r1,#$0190012C   ; 400x300
                sh              r1,$7E8[r6]
                ldi             r1,#$00320001   ; 50 strips per line
                sh              r1,$7F0[r6]             ; set lowres = divide by 2
                lw              r6,[sp]
                add             sp,sp,#8
                ret

;------------------------------------------------------------------------------
; Get a random number, and generate the next number.
;
; Parameters:
;       r18 = random stream number.
; Returns:
;       r1 = random 32 bit number.
;------------------------------------------------------------------------------

_GetRand:
                sh              r18,$FFDC0C04   ; set the stream
                nop                                             ; delay a wee bit
                lhu             r1,$FFDC0C00    ; get a number
                sh              r0,$FFDC0C00    ; generate next number
                ret

;------------------------------------------------------------------------------
; Fill the display memory with bands of color.
;------------------------------------------------------------------------------

_ColorBandMemory2:
                push    r1
                push    r2
                push    r6
                ldi             r2,#7
                sb              r2,LEDS                 ; write to LEDs
                ldi             r6,#$100000
                mov             r18,r0
                call    _GetRand
.0002:
                sc              r1,[r6]
                sb              r1,LEDS
                add             r6,r6,#2
                and             r2,r6,#$3FF
                bne             r2,r0,.0001
                mov             r18,r0
                call    _GetRand
.0001:
                cmpu    r2,r6,#$200000
                blt             r2,r0,.0002
                ldi             r2,#8
                sb              r2,LEDS                 ; write to LEDs
                pop             r6
                pop             r2
                pop             r1
                ret

;------------------------------------------------------------------------------
; Copy font to AVIC ram
;
;------------------------------------------------------------------------------

_BootCopyFont:
                sub             $sp,$sp,#24
                sw              $r2,[$sp]
                sw              $r3,8[$sp]
                sw              $r6,16[$sp]
                ldi             r1,#$0004
                sb              r1,LEDS
                ldi             r6,#AVIC

                ; Setup font table
                ldi             r1,#$1FFFEFF0
                sh              r1,$6F0[r6]                     ; set font table address
                sh              r0,$6F4[r6]                     ; set font id (0)
                ldi             r1,#%10000111000001110000000000000000   ; set font fixed, width, height = 8
                sh              r1,$1FFFEFFC
                ldi             r1,#$1FFFF000           ; set bitmap address (directly follows font table)
                sh              r1,$1FFFEFF4

                ldi             r6,#font8
                ldi             r2,#127                         ; 128 chars @ 8 bytes per char
.0001:
                lw              r3,[r6+r2*8]
                sw              r3,[r1+r2*8]
                sub             r2,r2,#1
                bne             r2,r0,.0001
                ldi             r1,#$0005
                sb              r1,LEDS
                lw              $r2,[$sp]
                lw              $r3,8[$sp]
                lw              $r6,16[$sp]
                ret             #24

;------------------------------------------------------------------------------
;------------------------------------------------------------------------------


;------------------------------------------------------------------------------
; DispChar:
;
; Display character at cursor position. The current foreground color and
; background color are used.
;
; Parameters:
;       r18                     character to display
; Returns:
;       <none>
; Registers Affected:
;       <none>
;------------------------------------------------------------------------------

_DispChar:
                sub             $sp,$sp,#32
                sw              $r2,[$sp]
                sw              $r3,8[$sp]
                sw              $r6,16[$sp]
                sw              $r29,24[$sp]
                
                ldi             r6,#AVIC
                ldi             r4,#1016
.0001:                  
                                                                        ; wait for character que to empty
                lhu             r2,$6E8[r6]                     ; read character queue index into r2
                bgtu    r2,r4,.0001                     ; allow up 24 entries to be in progress 

                lh              r3,fgcolor
                sh              r3,$6E0[r6]
                ldi             r3,#12                          ; 12 = set pen color
                sh              r3,$6E4[r6]
                sh              r0,$6E8[r6]                     ; queue

                lh              r3,bkcolor
                sh              r3,$6E0[r6]
                ldi             r3,#13                          ; 13 = set fill color
                sh              r3,$6E4[r6]
                sh              r0,$6E8[r6]                     ; queue

                lhu             r3,_DBGCursorCol
                shl             r3,r3,#19                       ; multiply by eight and convert to fixed (multiply by 65536)
                sh              r3,$6E0[r6]
                ldi             r3,#16                          ; 16 = set X0 pos
                sh              r3,$6E4[r6]
                sh              r0,$6E8[r6]                     ; queue

                lhu             r3,_DBGCursorRow
                shl             r3,r3,#19
                sh              r3,$6E0[r6]
                ldi             r3,#17                          ; 17 = set Y0 pos
                sh              r3,$6E4[r6]
                sh              r0,$6E8[r6]                     ; queue

                sh              r18,$6E0[r6]            ; data = character code
                ldi             r3,#0                           ; 0 = draw character
                sh              r3,$6E4[r6]
                sh              r0,$6E8[r6]                     ; queue

                call    _SyncCursorPos
                lw              $r2,[$sp]
                lw              $r3,8[$sp]
                lw              $r6,16[$sp]
                lw              $r29,24[$sp]
                ret             #32

;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
_SyncCursorPos:
                sub             $sp,$sp,#24
                sw              $r2,[$sp]
                sw              $r3,8[$sp]
                sw              $r6,16[$sp]
                ldi             r6,#AVIC
                lhu             r2,_DBGCursorCol
                lhu             r3,_DBGCursorRow
                shl             r3,r3,#3
                add             r3,r3,#28
                shl             r3,r3,#16
                shl             r2,r2,#3
                add             r2,r2,#256
                or              r2,r2,r3
                sh              r2,$408[r6]                     ;
                lw              $r2,[$sp]
                lw              $r3,8[$sp]
                lw              $r6,16[$sp]
                ret             #24

;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
_EnableCursor:
                push    r2
                push    r3
                push    r6
                
                ldi             r6,#AVIC
                ldi             r2,#$FFFFFFFF
                sh              r2,$7B0[a6]             ; enable sprite #0
                pop             r6
                pop             r3
                pop             r2
                ret

;----------------------------------------------------------------------------
; Setup the sprite color palette. The palette is loaded with random colors.
;----------------------------------------------------------------------------

_SetCursorPalette:
                sub             sp,sp,#24
                sw              r2,[sp]
                sw              r6,8[sp]
                sw              r7,16[sp]
                ldi             r6,#AVIC
                ldi             r2,#WHITE
                sh              r2,4[r6]                                ; palette entry #1
                ldi             r2,#%111110000000000    ; RED
                sh              r2,8[r6]                                ; palette entry #2
                ldi             r7,#12
.0001:
                mov             r18,r0
                call    _GetRand
                and             r1,r1,#$7FFF
                sh              r1,[r6+r7]
                add             r7,r7,#4
                cmp             r2,r7,#$400
                blt             r2,r0,.0001
                lw              r2,[sp]
                lw              r6,8[sp]
                lw              r7,16[sp]
                add             sp,sp,#24
                ret
                
;----------------------------------------------------------------------------
; Establish a default image for all the sprites.
;----------------------------------------------------------------------------

_SetCursorImage:
                push    r2
                push    r3
                push    r4
                push    r5
                push    r6
                push    r7

                ldi             r6,#AVIC
                ldi             r7,#$400
.0002:
                ldi             r2,#$1FFEE000
                sh              r2,[r6+r7]              ; sprite image address
                add             r7,r7,#4                ; advance to next field
                ldi             r2,#30*32                       ; number of pixels
                sh              r2,[r6+r7]              ; 
                add             r7,r7,#12               ; next sprite
                cmp             r2,r7,#$600
                bne             r2,r0,.0002

                ldi             r2,#$1FFEE000
                ldi             r3,#_XImage
                ldi             r5,#30
.0001:
                lw              r4,8[r3]        ; swap the order of the words around
                sw              r4,[r2]
                lw              r4,[r3]
                sw              r4,8[r2]
                add             r3,r3,#16
                add             r2,r2,#16
                sub             r5,r5,#1
                bne             r5,r0,.0001

                pop             r7              
                pop             r6
                pop             r5
                pop             r4
                pop             r3
                pop             r2
                ret

        align   8
_CursorBoxImage:
        dw              $1111111111000000,$00
        dw              $1000000001000000,$00
        dw              $1000000001000000,$00
        dw              $1000000001000000,$00
        dw              $1000000001000000,$00
        dw              $1000000001000000,$00
        dw              $1000000001000000,$00
        dw              $1000000001000000,$00
        dw              $1000110001000000,$00
        dw              $1111111111000000,$00

; Higher order word appears later in memory but is displayed first. So the
; order of these words are swapped around above. To make it convenient to
; define the sprite image.

_XImage:
        dw              $1122222222222222,$2222222222222211
        dw              $2110000000000000,$0000000000000112
        dw              $2011000000000000,$0000000000001102
        dw              $2001100000000000,$0000000000011002
        dw              $2000110000000000,$0000000000110002
        dw              $2000011000000000,$0000000001100002
        dw              $2000001100000000,$0000000011000002
        dw              $2000000110000000,$0000000110000002
        dw              $2000000011000000,$0000001100000002
        dw              $2000000001100000,$0000011000000002
        dw              $2000000000110000,$0000110000000002
        dw              $2000000000011009,$0901100000000002
        dw              $2000000000001100,$0011000000000002
        dw              $2000000000000110,$0110000000000002
        dw              $2000000000000011,$1100000000000002
        dw              $2000000000000011,$1100000000000002
        dw              $2000000000000110,$0110000000000002
        dw              $2000000000001100,$0011000000000002
        dw              $2000000000011009,$0901100000000002
        dw              $2000000000110000,$0000110000000002
        dw              $2000000001100000,$0000011000000002
        dw              $2000000011000000,$0000001100000002
        dw              $2000000110000000,$0000000110000002
        dw              $2000001100000000,$0000000011000002
        dw              $2000011000000000,$0000000001100002
        dw              $2000110000000000,$0000000000110002
        dw              $2001100000000000,$0000000000011002
        dw              $2011000000000000,$0000000000001102
        dw              $2110000000000000,$0000000000000112
        dw              $1122222222222222,$2222222222222211

;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
_RandomizeSpritePositions2:
                push    r1
                push    r6
                push    r7
                ldi             r6,#AVIC
                ldi             r7,#$408
.0001:
                mov             r18,r0
                call    _GetRand
                and             r1,r1,#$00FF00FF
                add             r1,r1,#$000E0080        ; add +28 to y and +256 to x
                sh              r1,[r6+r7]
                add             r7,r7,#$10                      ; advance to next sprite
                cmp             r1,r7,#$5F8
                blt             r1,r0,.0001
                pop             r7
                pop             r6
                pop             r1
                ret

;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
clearTxtScreen:
                ldi             r4,#$0024
                sb              r4,LEDS
                ldi             r1,#$FFD00000   ; text screen address
                ldi             r2,#24          ; number of chars 2480 (80x31)
                ldi             r3,#%000010000_111111111_0000100000
.cts1:
                sh              r3,[r1]
                add             r1,r1,#4
                sub             r2,r2,#1
                bne             r2,r0,.cts1
                ret

;===============================================================================
;===============================================================================
;===============================================================================
;===============================================================================
        align   16
font8:
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; $00
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; $04
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; $08
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; $0C
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; $10
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; $14
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; $18
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; $1C
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; 
        db      $00,$00,$00,$00,$00,$00,$00,$00 ; SPACE
        db      $18,$18,$18,$18,$18,$00,$18,$00 ; !
        db      $6C,$6C,$00,$00,$00,$00,$00,$00 ; "
        db      $6C,$6C,$FE,$6C,$FE,$6C,$6C,$00 ; #
        db      $18,$3E,$60,$3C,$06,$7C,$18,$00 ; $
        db      $00,$66,$AC,$D8,$36,$6A,$CC,$00 ; %
        db      $38,$6C,$68,$76,$DC,$CE,$7B,$00 ; &
        db      $18,$18,$30,$00,$00,$00,$00,$00 ; '
        db      $0C,$18,$30,$30,$30,$18,$0C,$00 ; (
        db      $30,$18,$0C,$0C,$0C,$18,$30,$00 ; )
        db      $00,$66,$3C,$FF,$3C,$66,$00,$00 ; *
        db      $00,$18,$18,$7E,$18,$18,$00,$00 ; +
        db      $00,$00,$00,$00,$00,$18,$18,$30 ; ,
        db      $00,$00,$00,$7E,$00,$00,$00,$00 ; -
        db      $00,$00,$00,$00,$00,$18,$18,$00 ; .
        db      $03,$06,$0C,$18,$30,$60,$C0,$00 ; /
        db      $3C,$66,$6E,$7E,$76,$66,$3C,$00 ; 0
        db      $18,$38,$78,$18,$18,$18,$18,$00 ; 1
        db      $3C,$66,$06,$0C,$18,$30,$7E,$00 ; 2
        db      $3C,$66,$06,$1C,$06,$66,$3C,$00 ; 3
        db      $1C,$3C,$6C,$CC,$FE,$0C,$0C,$00 ; 4
        db      $7E,$60,$7C,$06,$06,$66,$3C,$00 ; 5
        db      $1C,$30,$60,$7C,$66,$66,$3C,$00 ; 6
        db      $7E,$06,$06,$0C,$18,$18,$18,$00 ; 7
        db      $3C,$66,$66,$3C,$66,$66,$3C,$00 ; 8
        db      $3C,$66,$66,$3E,$06,$0C,$38,$00 ; 9
        db      $00,$18,$18,$00,$00,$18,$18,$00 ; :
        db      $00,$18,$18,$00,$00,$18,$18,$30 ; ;
        db      $00,$06,$18,$60,$18,$06,$00,$00 ; <
        db      $00,$00,$7E,$00,$7E,$00,$00,$00 ; =
        db      $00,$60,$18,$06,$18,$60,$00,$00 ; >
        db      $3C,$66,$06,$0C,$18,$00,$18,$00 ; ?
        db      $7C,$C6,$DE,$D6,$DE,$C0,$78,$00 ; @
        db      $3C,$66,$66,$7E,$66,$66,$66,$00 ; A
        db      $7C,$66,$66,$7C,$66,$66,$7C,$00 ; B
        db      $1E,$30,$60,$60,$60,$30,$1E,$00 ; C
        db      $78,$6C,$66,$66,$66,$6C,$78,$00 ; D
        db      $7E,$60,$60,$78,$60,$60,$7E,$00 ; E
        db      $7E,$60,$60,$78,$60,$60,$60,$00 ; F
        db      $3C,$66,$60,$6E,$66,$66,$3E,$00 ; G
        db      $66,$66,$66,$7E,$66,$66,$66,$00 ; H
        db      $3C,$18,$18,$18,$18,$18,$3C,$00 ; I
        db      $06,$06,$06,$06,$06,$66,$3C,$00 ; J
        db      $C6,$CC,$D8,$F0,$D8,$CC,$C6,$00 ; K
        db      $60,$60,$60,$60,$60,$60,$7E,$00 ; L
        db      $C6,$EE,$FE,$D6,$C6,$C6,$C6,$00 ; M
        db      $C6,$E6,$F6,$DE,$CE,$C6,$C6,$00 ; N
        db      $3C,$66,$66,$66,$66,$66,$3C,$00 ; O
        db      $7C,$66,$66,$7C,$60,$60,$60,$00 ; P
        db      $78,$CC,$CC,$CC,$CC,$DC,$7E,$00 ; Q
        db      $7C,$66,$66,$7C,$6C,$66,$66,$00 ; R
        db      $3C,$66,$70,$3C,$0E,$66,$3C,$00 ; S
        db      $7E,$18,$18,$18,$18,$18,$18,$00 ; T
        db      $66,$66,$66,$66,$66,$66,$3C,$00 ; U
        db      $66,$66,$66,$66,$3C,$3C,$18,$00 ; V
        db      $C6,$C6,$C6,$D6,$FE,$EE,$C6,$00 ; W
        db      $C3,$66,$3C,$18,$3C,$66,$C3,$00 ; X
        db      $C3,$66,$3C,$18,$18,$18,$18,$00 ; Y
        db      $FE,$0C,$18,$30,$60,$C0,$FE,$00 ; Z
        db      $3C,$30,$30,$30,$30,$30,$3C,$00 ; [
        db      $C0,$60,$30,$18,$0C,$06,$03,$00 ; \
        db      $3C,$0C,$0C,$0C,$0C,$0C,$3C,$00 ; ]
        db      $10,$38,$6C,$C6,$00,$00,$00,$00 ; ^
        db      $00,$00,$00,$00,$00,$00,$00,$FE ; _
        db      $18,$18,$0C,$00,$00,$00,$00,$00 ; `
        db      $00,$00,$3C,$06,$3E,$66,$3E,$00 ; a
        db      $60,$60,$7C,$66,$66,$66,$7C,$00 ; b
        db      $00,$00,$3C,$60,$60,$60,$3C,$00 ; c
        db      $06,$06,$3E,$66,$66,$66,$3E,$00 ; d
        db      $00,$00,$3C,$66,$7E,$60,$3C,$00 ; e
        db      $1C,$30,$7C,$30,$30,$30,$30,$00 ; f
        db      $00,$00,$3E,$66,$66,$3E,$06,$3C ; g
        db      $60,$60,$7C,$66,$66,$66,$66,$00 ; h
        db      $18,$00,$18,$18,$18,$18,$0C,$00 ; i
        db      $0C,$00,$0C,$0C,$0C,$0C,$0C,$78 ; j
        db      $60,$60,$66,$6C,$78,$6C,$66,$00 ; k
        db      $18,$18,$18,$18,$18,$18,$0C,$00 ; l
        db      $00,$00,$EC,$FE,$D6,$C6,$C6,$00 ; m
        db      $00,$00,$7C,$66,$66,$66,$66,$00 ; n
        db      $00,$00,$3C,$66,$66,$66,$3C,$00 ; o
        db      $00,$00,$7C,$66,$66,$7C,$60,$60 ; p
        db      $00,$00,$3E,$66,$66,$3E,$06,$06 ; q
        db      $00,$00,$7C,$66,$60,$60,$60,$00 ; r
        db      $00,$00,$3C,$60,$3C,$06,$7C,$00 ; s
        db      $30,$30,$7C,$30,$30,$30,$1C,$00 ; t
        db      $00,$00,$66,$66,$66,$66,$3E,$00 ; u
        db      $00,$00,$66,$66,$66,$3C,$18,$00 ; v
        db      $00,$00,$C6,$C6,$D6,$FE,$6C,$00 ; w
        db      $00,$00,$C6,$6C,$38,$6C,$C6,$00 ; x
        db      $00,$00,$66,$66,$66,$3C,$18,$30 ; y
        db      $00,$00,$7E,$0C,$18,$30,$7E,$00 ; z
        db      $0E,$18,$18,$70,$18,$18,$0E,$00 ; {
        db      $18,$18,$18,$18,$18,$18,$18,$00 ; |
        db      $70,$18,$18,$0E,$18,$18,$70,$00 ; }
        db      $72,$9C,$00,$00,$00,$00,$00,$00 ; ~
        db      $FE,$FE,$FE,$FE,$FE,$FE,$FE,$00 ; 

        align   8
tblvect:
        dw      0
        dw      1
        dw      2
        dw      3
        dw      4
        dw      5
        dw      6
        dw      7
        dw      8
        dw      9
        dw      10
        dw      11
        dw      12
        dw      13
        dw      14
        dw      15

vec1data:
        dw      1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
vec2data:
        dw      2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
        
.include "c:\Cores5\FT64\trunk\software\boot\BIOSMain.s"
.include "c:\Cores5\FT64\trunk\software\boot\FloatTest.s"
.include "c:\Cores5\FT64\trunk\software\boot\ramtest.s"
.include "c:\Cores5\FT64\trunk\software\c64libc\source\stdio.s"
.include "c:\Cores5\FT64\trunk\software\c64libc\source\ctype.s"
.include "c:\Cores5\FT64\trunk\software\c64libc\source\string.s"
.include "c:\Cores5\FT64\trunk\software\c64libc\source\DSD9\io.s"
.include "c:\Cores5\FT64\trunk\software\c64libc\source\prtflt.s"
.include "c:\Cores5\FT64\trunk\software\c64libc\source\libquadmath\log10q.s"
.include "c:\Cores5\FT64\trunk\software\FMTK\source\kernel\LockSemaphore.s"
.include "c:\Cores5\FT64\trunk\software\FMTK\source\kernel\UnlockSemaphore.s"
.include "c:\Cores5\FT64\trunk\software\FMTK\source\kernel\console.s"
.include "c:\Cores5\FT64\trunk\software\FMTK\source\kernel\PIC.s"
.include "c:\Cores5\FT64\trunk\software\FMTK\source\kernel\FMTKc.s"
.include "c:\Cores5\FT64\trunk\software\FMTK\source\kernel\FMTKmsg.s"
.include "c:\Cores5\FT64\trunk\software\FMTK\source\kernel\TCB.s"
.include "c:\Cores5\FT64\trunk\software\FMTK\source\kernel\IOFocusc.s"
.include "c:\Cores5\FT64\trunk\software\bootrom\source\video.asm"
.include "c:\Cores5\FT64\trunk\software\bootrom\source\TinyBasicDSD9.asm"


Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.