Advertisement
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, 2047
- call clear_reg
- mov r10, [terminal_port]
- cmp [operate_mode], 3
- je Test
- mov r0, [last_state]
- jnz system_check
- call splash
- send r10, 0x20
- call detect_model
- send r10, 'K'
- 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
- pause: ;press any key to continue
- push r0
- call input_char
- pop r0
- ret
- system_check:
- call clear_screen
- mov r0, .chk_msg
- call output_str
- cmp [operate_mode], 2
- je reboot
- call shutdown
- .chk_msg:
- dw 0x1000, "system check", 0
- 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
- ;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 3 ;0: normaly operate
- ;2: ignore last_state flag
- ;3: jump to program directly
- ;C.base functions
- ;functions for RT2
- 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
- mov [.crnt_cursor], 0
- mov [.prev_cursor], 0
- call .show_page
- call .move_cursor
- .mloop:
- call .input
- call .move_cursor
- jmp .mloop
- .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 0x1044, "MARS_t", 0
- .title1:
- dw 0x1064, "Config", 0
- Test:
- MARS_:
- call clear_screen
- bump r10
- mov r0, .data
- call output_str_opt
- mov r0, .map
- call draw_map
- call draw_char
- .loop:
- call CA_input
- call draw_char
- bump r10
- jmp .loop
- call pause
- call shutdown
- .data:
- dw 0x1008, 218, 0x1018, 218, 0x1028, 218, 0x1038, 218, 0x1048, 218, 0x1058, 218, 0x1068, 218, 0x1078, 218
- dw 0x1080, 217, 217, 217, 217, 217, 217, 217, 217, 227, 217, 217, 217, 217, 217, 217, 217
- dw 0x1009, 'H', 0x7F, 0x7F, 0x20, 'E', 0x7F,0x7F, 0x1019, 'T', 0x7F, 0x7F, 0x20, 'F', 0x7F, 0x7F, 0
- .map:
- dw "+++ ++"
- dw "++ +"
- dw " "
- dw " +"
- dw "### "
- dw "|B| C "
- dw " +++"
- dw " +++++"
- draw_map:
- mov r1, 0x1000
- .loop:
- send r10, r1
- send r10, [r0]
- send r10, [r0+1]
- send r10, [r0+2]
- send r10, [r0+3]
- send r10, [r0+4]
- send r10, [r0+5]
- send r10, [r0+6]
- send r10, [r0+7]
- add r1, 0x0010
- add r0, 8
- cmp r1, 0x1080
- jne .loop
- .exit:
- ret
- }
- draw_char:
- mov r0, char_pos
- mov r2, [r0+1]
- mov r1, crnt_map_addr
- add r1, r2
- or r2, 0x1000
- send r10, r2
- send r10, [r1]
- mov r2, [r0]
- or r2, 0x1000
- send r10, r2
- send r10, 174
- ret
- CA_char_up:
- mov r0, char_pos
- mov r1, [r0]
- mov [r0+1], r1
- sub [r0], 16
- ret
- CA_char_down:
- mov r0, char_pos
- mov r1, [r0]
- mov [r0+1], r1
- add [r0], 16
- ret
- CA_char_left:
- mov r0, char_pos
- mov r1, [r0]
- mov [r0+1], r1
- sub [r0], 1
- ret
- CA_char_right:
- mov r0, char_pos
- mov r1, [r0]
- mov [r0+1], r1
- add [r0], 1
- ret
- CA_input:
- bump r10
- recv r0, r10
- jc .go
- recv r0, r10
- jc .go
- recv r0, r10
- jc .go
- recv r0, r10
- jc .go
- jmp .exit
- .go:
- .little:
- sub r0, 'a'
- .recognize:
- add r0, .keybinding
- call [r0]
- hlt
- .exit:
- ret
- .keybinding:
- dw CA_char_left;a
- dw .exit ;b
- dw .exit ;c
- dw CA_char_right;d
- dw .exit ;e
- dw .exit ;f
- dw .exit ;g
- dw .exit ;h
- dw .exit ;i
- dw .exit ;j
- dw .exit ;k
- dw .exit ;l
- dw .exit ;m
- dw .exit ;n
- dw .exit ;o
- dw .exit ;p
- dw .exit ;q
- dw .exit ;r
- dw CA_char_down;s
- dw .exit ;t
- dw .exit ;u
- dw .exit ;v
- dw CA_char_up;w
- dw .exit ;x
- dw .exit ;y
- dw .exit ;z
- ;global variables @ project_c
- char_pos:
- dw 0x0033
- prev_char_pos:
- dw 0x0033
- game_time:
- dw 0;
- crnt_map:
- dw 0
- crnt_map_addr:
- dw MARS_.map
- Config:
- mov r0, .str
- call output_str
- call shutdown
- .str: dw 0x1000, "Config", 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement