ping-pong supv

This commit is contained in:
cxy004 2021-08-16 02:18:13 +08:00
parent 7063c67687
commit 5fdacc9278
5 changed files with 125 additions and 75 deletions

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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)