Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- dw 0xABCD
- POST:
- mov r0, 0 ;testing hardware
- add r0, 8
- sub r0, 7
- shl r0, 4
- shr r0, 2
- cmp r0, 4
- cmp r0, 4
- cmp r0, 4
- cmp r0, 4
- jne .post_failure_halt
- jne .post_failure_halt
- jne .post_failure_halt
- jne .post_failure_halt
- jmp .post_passed
- .post_failure_halt:
- hlt
- jmp .post_failure_halt
- jmp .post_failure_halt
- jmp .post_failure_halt
- jmp .post_failure_halt
- .post_passed:
- bootstrap:
- mov sp, 0x0700
- call clear_reg
- mov r10, [terminal_port]
- call clear_screen
- call splash
- send r10, 0x20
- call detect_model
- send r10, 'K'
- mov r0, [last_state]
- jnz system_check
- mov [last_state], 1
- jmp main
- splash:
- send r10, 0x200F
- send r10, 0x1000
- send r10, 'C'
- send r10, '-'
- send r10, 'b'
- send r10, 'a'
- send r10, 's'
- send r10, 'e'
- ret
- detect_model:
- mov r0, [2048]
- cmp r0, 0xABCD
- je .k2
- mov r0, [4096]
- cmp r0, 0xABCD
- je .k4
- mov r0, [8192]
- cmp r0, 0xABCD
- je .k8
- ret
- .k2:
- send r10, '2'
- ret
- .k4:
- send r10, '4'
- ret
- .k8:
- send r10, '8'
- ret
- shutdown:
- mov [last_state], 0
- mov r0, .str
- call output_str
- call clear_screen
- hlt
- mov ip, 0
- mov ip, 0
- .str:
- dw 0x10FD, "...", 0
- reboot:
- mov [last_state], 0
- jmp POST
- system_check:
- mov r0, .chk_msg
- call output_str
- cmp [operate_mode], 2
- je reboot
- call shutdown
- .chk_msg:
- dw 0x1000, "system check", 0
- ;C.base configurations
- terminal_color:
- dw 0x200F ;default = 0x200F
- terminal_port:
- dw 0x0000 ;default = 0x200F
- last_state:
- dw 0 ;0:successfully shutdowned
- ;1:while running, suddenly shutdowned
- ;2:shutdowned in critical moment
- operate_mode:
- dw 2 ;0: normaly operate
- ;2: ignore last_state flag
- ;C.base functions
- clear_reg: ;zero-fil registers
- mov r0, 0
- mov r1, 0
- mov r2, 0
- mov r3, 0
- mov r4, 0
- mov r5, 0
- mov r6, 0
- mov r7, 0
- mov r8, 0
- mov r9, 0
- mov r10, 0
- mov r11, 0
- mov r12, 0
- mov r13, 0
- ret
- input_char:
- .wait_loop:
- wait r0
- js .wait_loop
- bump r10
- .bump_loop:
- recv r0, r10
- jnc .bump_loop
- ret
- input_char_blink:
- mov [.cursor_p], r0
- push r1
- mov r1, 0x5F
- .wait_loop:
- sub [.t], 1
- js .timer
- wait r0
- js .wait_loop
- bump r10
- .bump_loop:
- recv r0, r10
- jnc .bump_loop
- ret
- .t:
- dw 4
- .cursor_p:
- dw 0
- .timer:
- send r10, [.cursor_p]
- send r10, r1
- xor r1, 0x7F
- mov [.t], 4
- jmp .wait_loop
- input_str:
- mov [.wall], r0
- send r10, 0x7F
- add r1, r0 ;r0: string space address
- .wait_loop: ;r1: max length
- wait r3 ;r2: terminal cursor
- js .wait_loop
- bump r10
- .bump_loop:
- recv r3, r10
- jnc .bump_loop
- cmp r3, 0x0D
- je .enter
- cmp r3, 0x08
- je .bs
- .ok:
- cmp r1, r0
- je .wait_loop
- mov [r0], r3
- send r10, r2
- send r10, r3
- send r10, 170
- add r0, 1
- add r2, 1
- jmp .wait_loop
- .bs:
- cmp [.wall], r0
- je .wait_loop
- sub r0, 1
- sub r2, 1
- mov [r0], 0
- send r10, r2
- send r10, 170
- send r10, 0x20
- jmp .wait_loop
- .enter:
- ret
- .wall: dw 0
- input_str_blink:
- mov [.wall], r0
- mov r4, 0x5F
- mov [.t], 4
- add r1, r0 ;r0: string space address
- .wait_loop: ;r1: max length
- sub [.t], 1
- js .time
- wait r3 ;r2: terminal cursor
- js .wait_loop
- bump r10
- .bump_loop: ;r4: cursor character
- recv r3, r10
- jnc .bump_loop
- cmp r3, 0x0D
- je .enter
- cmp r3, 0x08
- je .bs
- .ok:
- cmp r1, r0
- je .limit_length
- mov [r0], r3
- send r10, r2
- send r10, r3
- add r0, 1
- add r2, 1
- jmp .wait_loop
- .bs:
- cmp [.wall], r0
- je .wait_loop
- send r10, [terminal_color]
- sub r0, 1
- sub r2, 1
- mov [r0], 0
- send r10, r2
- send r10, 0x20
- send r10, 0x20
- jmp .wait_loop
- .enter:
- send r10, r2
- send r10, 0x20
- send r10, [terminal_color]
- ret
- .wall: dw 0
- .t: dw 4
- .time:
- send r10, r2
- send r10, r4
- mov [.t], 4
- xor r4, 0x7F
- jmp .wait_loop
- .limit_length:
- send r10, 0x200C
- jmp .wait_loop
- input_str_blink_opt:
- mov [.wall], r0
- mov r4, 0x7F
- mov [.t], 4
- add r1, r0 ;r0: string space address
- jmp .wait_loop
- .limit_length:
- send r10, 0x200C
- .wait_loop: ;r1: max length
- sub [.t], 1
- jne .keepgoing
- .time:
- send r10, r2
- send r10, r4
- mov [.t], 4
- xor r4, 0x5F
- .keepgoing:
- wait r3 ;r2: terminal cursor
- js .wait_loop
- bump r10
- .bump_loop: ;r4: cursor character
- recv r3, r10
- jnc .bump_loop
- cmp r3, 0x0D
- je .enter
- cmp r3, 0x08
- je .bs
- .ok:
- cmp r1, r0
- je .limit_length
- mov [r0], r3
- send r10, r2
- send r10, r3
- add r0, 1
- add r2, 1
- jmp .wait_loop
- .bs:
- cmp [.wall], r0
- je .wait_loop
- send r10, [terminal_color]
- sub r0, 1
- sub r2, 1
- mov [r0], 0
- send r10, r2
- send r10, 0x20
- send r10, 0x20
- jmp .wait_loop
- .enter:
- send r10, [terminal_color]
- ret
- .wall: dw 0
- .t: dw 4
- output_str:
- push r1 ;r0: string address
- .loop:
- mov r1, [r0]
- jz .exit
- send r10, r1
- add r0, 1
- jmp .loop
- .exit:
- pop r1
- ret
- output_str_opt:
- push r1 ;r0: string address
- sub r0,1
- .loop:
- add r0, 1
- mov r1, [r0]
- send r10, r1
- jnz .loop
- .exit:
- pop r1
- ret
- o_hex:
- push r1 ;r0: number to display
- mov r1, .str
- call bin2hex
- push r0
- mov r0, .str
- call output_str
- pop r0
- pop r1
- ret
- .str:
- dw 0, 0, 0, 0, 0
- bin2hex:
- push r2
- push r3
- mov r3, .hexdata ;r0: target number
- mov r2, r0 ;r1: string space (5 cells)
- and r2, 0xF000
- shr r2, 12
- mov r2, [r2+r3]
- mov [r1], r2
- mov r2, r0
- and r2, 0x0F00
- shr r2, 8
- mov r2, [r2+r3]
- mov [r1+1], r2
- mov r2, r0
- and r2, 0x00F0
- shr r2, 4
- mov r2, [r2+r3]
- mov [r1+2], r2
- mov r2, r0
- and r2, 0x000F
- mov r2, [r2+r3]
- mov [r1+3], r2
- mov [r1+4], 0
- pop r3
- pop r2
- ret
- .hexdata:
- dw "0123456789ABCDEF"
- clear_screen:
- push r0
- mov r0, 0x1000
- shl [.point], 4
- add [.point], r0
- pop r0
- send r10, [.point]
- send r10, [terminal_color]
- .loop:
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- sub [.lines], 1
- jnz .loop
- .exit:
- mov [.point], 0
- mov [.lines], 12
- ret
- .point:
- dw 0
- .lines:
- dw 12
- clear_line:
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- send r10, 0x20
- ret
- ;C.base external functions
- ;C.base variables
- Cbase_end:
- main:
- C_UI: ;C-UI : WIP
- call .show_page
- call .input
- call .move_cursor
- .crnt_cursor:
- dw 0
- .prev_cursor:
- dw 0
- .show_page:
- mov r2, program_titles
- mov r0, [r2]
- .loop:
- jz .next
- call output_str_opt
- add r2, 1
- mov r0, [r2]
- jmp .loop
- .next:
- ret
- .move_cursor:
- mov r0, [.prev_cursor]
- add r0, program_titles
- mov r0, [r0]
- mov r0, [r0]
- sub r0, 1
- send r10, r0
- send r10, 0x20
- mov r0, [.crnt_cursor]
- add r0, program_titles
- mov r0, [r0]
- mov r0, [r0]
- sub r0, 1
- send r10, r0
- send r10, 194
- ret
- .input:
- call input_char
- cmp r0, 'w'
- je .up
- cmp r0, 's'
- je .down
- cmp r0, 13
- je .enter
- jmp .input
- .up:
- mov r0, [.crnt_cursor]
- cmp r0, 0
- je .input
- mov [.prev_cursor], r0
- sub [.crnt_cursor], 1
- ret
- .down:
- mov r0, [.crnt_cursor]
- cmp r0, 1
- je .input
- mov [.prev_cursor], r0
- add [.crnt_cursor], 1
- ret
- .enter:
- mov r0, [.crnt_cursor]
- add r0, program_addr
- jmp [r0]
- program_addr:
- dw Test, Config, 0
- program_titles:
- dw .title0, .title1, 0
- .title0:
- dw 0x1043, " Test", 0
- .title1:
- dw 0x1063, " Config", 0
- Test:
- mov r0, .str
- call output_str
- call shutdown
- .str: dw 0x1000, "Test", 0
- Config:
- mov r0, .str
- call output_str
- call shutdown
- .str: dw 0x1000, "Config", 0
Add Comment
Please, Sign In to add comment