ping-pong supv
This commit is contained in:
parent
7063c67687
commit
5fdacc9278
@ -11,15 +11,15 @@
|
||||
INITLOCATE:
|
||||
li k0, 0xa0000000
|
||||
li k1, 0xbfc00000
|
||||
la t0, _text_ebase_begin
|
||||
la t1, _text_ebase_end
|
||||
la t2, _text_ebase_begin
|
||||
la t3, _text_code_begin
|
||||
la t4, _text_code_end
|
||||
la t5, _text_code_begin
|
||||
la t6, _data_begin
|
||||
la t7, _data_end
|
||||
la t8, _data_begin
|
||||
li t0, _text_ebase_begin
|
||||
li t1, _text_ebase_end
|
||||
li t2, _text_ebase_begin
|
||||
li t3, _text_code_begin
|
||||
li t4, _text_code_end
|
||||
li t5, _text_code_begin
|
||||
li t6, _data_begin
|
||||
li t7, _data_end
|
||||
li t8, _data_begin
|
||||
or t0, t0, k0
|
||||
or t1, t1, k0
|
||||
or t2, t2, k1
|
||||
@ -29,7 +29,7 @@ INITLOCATE:
|
||||
or t6, t6, k0
|
||||
or t7, t7, k0
|
||||
or t8, t8, k1
|
||||
la t9, START
|
||||
li t9, START
|
||||
|
||||
/* copy .text.ebase */
|
||||
1:
|
||||
|
@ -9,6 +9,7 @@
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
|
||||
.global pause
|
||||
pause:
|
||||
.asciz "pause\n"
|
||||
spx_table:
|
||||
@ -36,6 +37,7 @@ spy_table:
|
||||
|
||||
.word 0
|
||||
.word 0
|
||||
.global kb_buffer
|
||||
kb_buffer:
|
||||
.rept 32
|
||||
.word 0
|
||||
@ -44,9 +46,6 @@ score:
|
||||
.word 0
|
||||
button_state:
|
||||
.word 0
|
||||
.global pause_state
|
||||
pause_state:
|
||||
.word 0
|
||||
|
||||
|
||||
.section .text
|
||||
@ -60,16 +59,15 @@ GAME_START:
|
||||
lw t2, %lo(SWITCH)(t0)
|
||||
beqz t2, 1f
|
||||
lw t3, %lo(BUTTON)(t1)
|
||||
lui t0, %hi(pause_state)
|
||||
li t2, 0x1
|
||||
sw t2, %lo(pause_state)(t0)
|
||||
la a0, UART0
|
||||
la a1, pause
|
||||
li a0, UART0
|
||||
li a1, pause
|
||||
jal PRINT
|
||||
nop
|
||||
lui t0, %hi(next_thread)
|
||||
la t1, SUPV_TCB
|
||||
sw t1, %lo(next_thread)(t0)
|
||||
lui t4, %hi(next_thread)
|
||||
li t1, SUPV_TCB
|
||||
sw t1, %lo(next_thread)(t4)
|
||||
li t4, 0x1
|
||||
sw t4, TF_s0(t1)
|
||||
syscall
|
||||
1:
|
||||
lui t0, %hi(button_state)
|
||||
@ -104,7 +102,7 @@ GAME_START:
|
||||
addiu t0, t0, -2
|
||||
xor ball_dy, ball_dy, t0
|
||||
5:
|
||||
la t0, kb_buffer
|
||||
li t0, kb_buffer
|
||||
lw t2, -8(t0)
|
||||
lw t3, -4(t0)
|
||||
beq t2, t3, 9f
|
||||
@ -120,19 +118,21 @@ kb_readbuffer:
|
||||
li t1, KB_PAUSE
|
||||
bne t5, t1, 6f
|
||||
nop
|
||||
lui v0, %hi(pause_state)
|
||||
li t1, 0x2
|
||||
sw t1, %lo(pause_state)(v0)
|
||||
la a0, UART0
|
||||
la a1, pause
|
||||
addiu t2, t2, 4
|
||||
li a0, UART0
|
||||
sw t2, -8(t0)
|
||||
li a1, pause
|
||||
jal PRINT
|
||||
nop
|
||||
lui v0, %hi(next_thread)
|
||||
la t1, SUPV_TCB
|
||||
sw t1, %lo(next_thread)(v0)
|
||||
lui t4, %hi(next_thread)
|
||||
li t1, SUPV_TCB
|
||||
sw t1, %lo(next_thread)(t4)
|
||||
li t4, 0x2
|
||||
sw t4, TF_s0(t1)
|
||||
syscall
|
||||
lw t2, -8(t0)
|
||||
j kb_readbuffer_loop
|
||||
addiu t2, t2, 4
|
||||
lw t3, -4(t0)
|
||||
6:
|
||||
li t1, KB_UP
|
||||
bne t5, t1, 7f
|
||||
@ -156,13 +156,13 @@ kb_readbuffer:
|
||||
slt t0, ball_x, t6
|
||||
beqz t0, 10f
|
||||
nop
|
||||
la a0, UART1
|
||||
li a0, UART1
|
||||
li a1, KB_SCORE
|
||||
jal WRITESERIAL
|
||||
nop
|
||||
li ball_x, center_x
|
||||
li ball_y, center_y
|
||||
j 14f
|
||||
j GAME_START
|
||||
sub ball_dx, zero, ball_dx
|
||||
10:
|
||||
slti t1, ball_x, WIDTH + 1
|
||||
@ -176,24 +176,24 @@ kb_readbuffer:
|
||||
sw t3, %lo(SEG7)(t2)
|
||||
li ball_x, center_x
|
||||
li ball_y, center_y
|
||||
j 14f
|
||||
j GAME_START
|
||||
sub ball_dx, zero, ball_dx
|
||||
11:
|
||||
bnez t0, 12f
|
||||
addi t1, ball_x, -player2_x
|
||||
sub t2, ball_x, player1_y
|
||||
bltz t2, 14f
|
||||
bltz t2, GAME_START
|
||||
addi t2, t2, -2
|
||||
bgez t2, 14f
|
||||
bgez t2, GAME_START
|
||||
nop
|
||||
j 13f
|
||||
sll t1, random, 13
|
||||
12:
|
||||
bnez t1, 14f
|
||||
bnez t1, GAME_START
|
||||
sub t3, ball_x, player2_y
|
||||
bltz t3, 14f
|
||||
bltz t3, GAME_START
|
||||
addi t3, t3, -2
|
||||
bgez t3, 14f
|
||||
bgez t3, GAME_START
|
||||
sll t1, random, 13
|
||||
13:
|
||||
and random, random, t1
|
||||
@ -201,17 +201,16 @@ kb_readbuffer:
|
||||
and random, random, t1
|
||||
xor random, random, t5
|
||||
sra t3, random, 2
|
||||
la t2, spx_table
|
||||
li t2, spx_table
|
||||
andi t3, t3, 0x7
|
||||
add t3, t3, t2
|
||||
lw ball_spx, 0(t3)
|
||||
sra t3, random, 5
|
||||
la t2, spy_table
|
||||
li t2, spy_table
|
||||
andi t3, t3, 0x7
|
||||
add t3, t3, t2
|
||||
lw ball_spy, 0(t3)
|
||||
sub ball_dx, zero, ball_dx
|
||||
14:
|
||||
j GAME_START
|
||||
nop
|
||||
|
||||
@ -224,7 +223,7 @@ GAME_TIMER:
|
||||
sw v0, 0(sp)
|
||||
addiu ball_cntx, ball_cntx, 1
|
||||
addiu ball_cnty, ball_cnty, 1
|
||||
la a0, UART0
|
||||
li a0, UART0
|
||||
ori a1, player1_y, 0x80
|
||||
jal WRITESERIAL
|
||||
nop
|
||||
@ -248,8 +247,8 @@ GAME_TIMER:
|
||||
j RESTART
|
||||
addi sp, sp, 16
|
||||
|
||||
.global GAME_KB1
|
||||
GAME_KB1:
|
||||
.global KB_HANDLER
|
||||
KB_HANDLER:
|
||||
addi sp, sp, -24
|
||||
sw ra, 20(sp)
|
||||
sw t1, 16(sp)
|
||||
@ -258,8 +257,8 @@ GAME_KB1:
|
||||
sw v1, 4(sp)
|
||||
sw v0, 0(sp)
|
||||
|
||||
la a0, UART1
|
||||
la t0, kb_buffer
|
||||
li a0, UART1
|
||||
li t0, kb_buffer
|
||||
lw k0, -8(t0)
|
||||
lw k1, -4(t0)
|
||||
kb_writebuffer:
|
||||
|
@ -27,8 +27,8 @@ SUPV_TCB:
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word SUPV_SHELL
|
||||
.word KB_HANDLER
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word 0
|
||||
@ -80,7 +80,7 @@ GAME_TCB:
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word GAME_KB1
|
||||
.word KB_HANDLER
|
||||
.word DEFAULT_INT_HANDLER
|
||||
.word GAME_TIMER
|
||||
.word 0
|
||||
@ -99,9 +99,9 @@ GAME_TCB:
|
||||
.word 0
|
||||
// random
|
||||
.word 0xBFC00380
|
||||
// player1
|
||||
// player1_y
|
||||
.word center_y
|
||||
// player2
|
||||
// player1_y
|
||||
.word center_y
|
||||
// ball_x
|
||||
.word center_x
|
||||
@ -150,8 +150,8 @@ next_thread:
|
||||
|
||||
.global START
|
||||
START:
|
||||
la t0, _sbss
|
||||
la t1, _ebss
|
||||
li t0, _sbss
|
||||
li t1, _ebss
|
||||
beq t0, t1, bss_init_done
|
||||
nop
|
||||
bss_init:
|
||||
@ -160,16 +160,16 @@ bss_init:
|
||||
bne t0, t1, bss_init
|
||||
nop
|
||||
bss_init_done:
|
||||
la t2, _text_ebase_begin
|
||||
li t2, _text_ebase_begin
|
||||
mtc0 t2, CP0_EBASE
|
||||
|
||||
/* init serial */
|
||||
la t0, UART0
|
||||
li t0, UART0
|
||||
|
||||
// FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER_1
|
||||
li t1, 0x1 | 0x2 | 0x4 | 0x0
|
||||
sb t1, 2(t0) // FIFO
|
||||
li t1, 0x80 // CFCR_DLAB, divisor latch
|
||||
li t1, 0x80 // CFCR_DliB, divisor litch
|
||||
sb t1, 3(t0) // CFCR
|
||||
li t1, 0x23 // modify Baud 57600
|
||||
sb t1, 0(t0) // DATA
|
||||
@ -184,12 +184,12 @@ bss_init_done:
|
||||
li t1, 0x1 // IRxE
|
||||
sb t1, 1(t0) // IER
|
||||
|
||||
la t0, UART1
|
||||
li t0, UART1
|
||||
|
||||
// FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER_1
|
||||
li t1, 0x1 | 0x2 | 0x4 | 0x0
|
||||
sb t1, 2(t0) // FIFO
|
||||
li t1, 0x80 // CFCR_DLAB, divisor latch
|
||||
li t1, 0x80 // CFCR_DliB, divisor litch
|
||||
sb t1, 3(t0) // CFCR
|
||||
li t1, 0x1b // modify Baud 76388.89
|
||||
sb t1, 0(t0) // DATA
|
||||
@ -204,11 +204,16 @@ bss_init_done:
|
||||
li t1, 0x1 // IRxE
|
||||
sb t1, 1(t0) // IER
|
||||
|
||||
la a0, UART0
|
||||
la a1, pingpong
|
||||
li a0, UART0
|
||||
li a1, pingpong
|
||||
jal PRINT
|
||||
nop
|
||||
|
||||
li a0, UART1
|
||||
li a1, KB_RESET
|
||||
jal WRITESERIAL
|
||||
nop
|
||||
|
||||
j RESTART_LOAD
|
||||
nop
|
||||
|
||||
|
@ -6,22 +6,68 @@
|
||||
.set noat
|
||||
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
|
||||
.global resume
|
||||
resume:
|
||||
.asciz "resume\n"
|
||||
|
||||
|
||||
.section .text
|
||||
.p2align 2
|
||||
|
||||
.global SUPV_START
|
||||
SUPV_START:
|
||||
lui t0, %hi(SWITCH) + 1
|
||||
lw t1, %lo(SWITCH)(t0)
|
||||
sltiu t1, t1, 1
|
||||
xor t1, t1, zero
|
||||
and s0, s0, t1
|
||||
li t0, kb_buffer
|
||||
lw t2, -8(t0)
|
||||
lw t3, -4(t0)
|
||||
beq t2, t3, 3f
|
||||
addu t1, t0, t2
|
||||
j kb_readbuffer
|
||||
lw t5, 0(t1)
|
||||
kb_readbuffer_loop:
|
||||
andi t2, t2, 0x7c
|
||||
beq t2, t3, 2f
|
||||
addu t1, t0, t2
|
||||
lw t5, 0(t1)
|
||||
kb_readbuffer:
|
||||
li t1, KB_PAUSE
|
||||
bne t5, t1, 1f
|
||||
li t1, KB_RESUME
|
||||
addiu t2, t2, 4
|
||||
j kb_readbuffer_loop
|
||||
ori s0, s0, 0x1
|
||||
1:
|
||||
bne t5, t1, kb_readbuffer_loop
|
||||
addiu t2, t2, 4
|
||||
j kb_readbuffer_loop
|
||||
andi s0, s0, 0x2
|
||||
2:
|
||||
sw t2, -8(t0)
|
||||
3:
|
||||
bnez s0, SUPV_START
|
||||
li a0, UART0
|
||||
li a1, resume
|
||||
jal PRINT
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
lui t0, %hi(next_thread)
|
||||
li t1, GAME_TCB
|
||||
sw t1, %lo(next_thread)(t0)
|
||||
syscall
|
||||
j SUPV_START
|
||||
nop
|
||||
|
||||
.global SUPV_SHELL
|
||||
SUPV_SHELL:
|
||||
j RESTART
|
||||
nop
|
||||
|
||||
|
||||
.set reorder
|
||||
.set at
|
||||
|
@ -8,21 +8,21 @@
|
||||
.section .text.ebase
|
||||
.p2align 2
|
||||
|
||||
la a0, UART0
|
||||
la a1, pingpong
|
||||
li a0, UART0
|
||||
li a1, pingpong
|
||||
jal PRINT
|
||||
nop
|
||||
|
||||
.section .text.ebase180
|
||||
.p2align 2
|
||||
|
||||
la a0, UART0
|
||||
la a1, pingpong
|
||||
li a0, UART0
|
||||
li a1, pingpong
|
||||
jal PRINT
|
||||
nop
|
||||
|
||||
mfc0 k1, CP0_STATUS
|
||||
la k0, 0
|
||||
li k0, 0
|
||||
mtc0 k0, CP0_STATUS
|
||||
|
||||
lui k0, %hi(current_thread)
|
||||
@ -155,8 +155,8 @@ RESTART_SAVE:
|
||||
|
||||
.global RESTART_LOAD
|
||||
RESTART_LOAD:
|
||||
la a0, UART0
|
||||
la a1, pingpong
|
||||
li a0, UART0
|
||||
li a1, pingpong
|
||||
jal PRINT
|
||||
nop
|
||||
lui k0, %hi(next_thread)
|
||||
|
Loading…
Reference in New Issue
Block a user