Fix compiling erros
This commit is contained in:
parent
e99bf57286
commit
b674df5a59
Binary file not shown.
|
|
@ -0,0 +1,205 @@
|
||||||
|
:alias x0 v8
|
||||||
|
:alias x1 v9
|
||||||
|
:alias x2 vA
|
||||||
|
:alias y vB
|
||||||
|
: imageok
|
||||||
|
0xEA 0xAC 0xAA 0xEA
|
||||||
|
: imagefalse
|
||||||
|
0xCE 0xAA 0xAA 0xAE
|
||||||
|
: im0
|
||||||
|
0xE0 0xA0 0xA0 0xE0
|
||||||
|
: im1
|
||||||
|
0xC0 0x40 0x40 0xE0
|
||||||
|
: im2
|
||||||
|
0xE0 0x20 0xC0 0xE0
|
||||||
|
: im3
|
||||||
|
0xE0 0x60 0x20 0xE0
|
||||||
|
: im4
|
||||||
|
0xA0 0xE0 0x20 0x20
|
||||||
|
: im5
|
||||||
|
0x60 0x40 0x20 0x40
|
||||||
|
: im6
|
||||||
|
0xE0 0x80 0xE0 0xE0
|
||||||
|
: im7
|
||||||
|
0xE0 0x20 0x20 0x20
|
||||||
|
: im8
|
||||||
|
0xE0 0xE0 0xA0 0xE0
|
||||||
|
: im9
|
||||||
|
0xE0 0xE0 0x20 0xE0
|
||||||
|
: imA
|
||||||
|
0x40 0xA0 0xE0 0xA0
|
||||||
|
: imE
|
||||||
|
0xE0 0xC0 0x80 0xE0
|
||||||
|
: imF
|
||||||
|
0xE0 0x80 0xC0 0x80
|
||||||
|
: imX
|
||||||
|
0xA0 0x40 0xA0 0xA0
|
||||||
|
|
||||||
|
:macro drawop A B {
|
||||||
|
i := A
|
||||||
|
sprite x0 y 4
|
||||||
|
i := B
|
||||||
|
sprite x1 y 4
|
||||||
|
}
|
||||||
|
|
||||||
|
: testAX
|
||||||
|
#test Ax
|
||||||
|
i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
return
|
||||||
|
|
||||||
|
: test1x
|
||||||
|
i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
jump endtest
|
||||||
|
|
||||||
|
: main
|
||||||
|
x0 := 1
|
||||||
|
x1 := 5
|
||||||
|
x2 := 10
|
||||||
|
y := 1
|
||||||
|
v5 := 42
|
||||||
|
v6 := 43
|
||||||
|
#test 3x
|
||||||
|
drawop im3 imX
|
||||||
|
i := imageok
|
||||||
|
if v6 != 43 then i := imagefalse
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 4x
|
||||||
|
y := 6
|
||||||
|
drawop im4 imX
|
||||||
|
i := imagefalse
|
||||||
|
if v5 == 42 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 5x
|
||||||
|
y := 11
|
||||||
|
drawop im5 imX
|
||||||
|
i := imagefalse
|
||||||
|
if v5 != v6 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 7x
|
||||||
|
y := 16
|
||||||
|
drawop im7 imX
|
||||||
|
i := imagefalse
|
||||||
|
v6 += 255
|
||||||
|
if v6 == 42 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 9x
|
||||||
|
y := 21
|
||||||
|
drawop im9 imX
|
||||||
|
i := imagefalse
|
||||||
|
if v5 == v6 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test AX
|
||||||
|
y := 26
|
||||||
|
drawop imA imX
|
||||||
|
testAX
|
||||||
|
#test 0E
|
||||||
|
x0 := 23
|
||||||
|
x1 := 27
|
||||||
|
x2 := 32
|
||||||
|
y := 1
|
||||||
|
drawop im0 imE
|
||||||
|
i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 8xy0
|
||||||
|
y := 6
|
||||||
|
drawop im8 im0
|
||||||
|
i := imagefalse
|
||||||
|
v7 := v5
|
||||||
|
if v7 == 42 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 8xy1
|
||||||
|
y := 11
|
||||||
|
drawop im8 im1
|
||||||
|
i := imagefalse
|
||||||
|
v7 := 42
|
||||||
|
v7 |= y
|
||||||
|
if v7 == 43 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 8xy2
|
||||||
|
y := 16
|
||||||
|
drawop im8 im2
|
||||||
|
i := imagefalse
|
||||||
|
v6 := 120
|
||||||
|
v7 := 31
|
||||||
|
v7 &= v6
|
||||||
|
if v7 == 24 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 8xy3
|
||||||
|
y := 21
|
||||||
|
drawop im8 im3
|
||||||
|
i := imagefalse
|
||||||
|
v6 := 120
|
||||||
|
v7 := 31
|
||||||
|
v7 ^= v6
|
||||||
|
if v7 == 103 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 8xy4
|
||||||
|
y := 26
|
||||||
|
drawop im8 im4
|
||||||
|
i := imagefalse
|
||||||
|
v6 := 140
|
||||||
|
v7 := 140
|
||||||
|
v7 += v6
|
||||||
|
if v7 == 24 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 8xy5
|
||||||
|
x0 := 44
|
||||||
|
x1 := 48
|
||||||
|
x2 := 52
|
||||||
|
y := 1
|
||||||
|
drawop im8 im5
|
||||||
|
i := imagefalse
|
||||||
|
v6 := 140
|
||||||
|
v7 := 120
|
||||||
|
v7 -= v6
|
||||||
|
if v7 == 236 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 8xy6
|
||||||
|
y := 6
|
||||||
|
drawop im8 im6
|
||||||
|
i := imagefalse
|
||||||
|
v6 := 224
|
||||||
|
v6 <<= v6
|
||||||
|
if v6 == 192 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 8xyE
|
||||||
|
y := 11
|
||||||
|
drawop im8 imE
|
||||||
|
i := imagefalse
|
||||||
|
v6 := 15
|
||||||
|
v6 >>= v6
|
||||||
|
if v6 == 7 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test Fx55,Fx65
|
||||||
|
y := 16
|
||||||
|
drawop imF im5
|
||||||
|
i := 1000
|
||||||
|
v0 := 0
|
||||||
|
v1 := 48
|
||||||
|
save v1
|
||||||
|
i := 1001
|
||||||
|
load v0
|
||||||
|
i := imagefalse
|
||||||
|
if v0 == 48 then i := imageok
|
||||||
|
sprite x2 y 4
|
||||||
|
#test Fx33
|
||||||
|
y := 21
|
||||||
|
drawop imF im3
|
||||||
|
i := 1000
|
||||||
|
v6 := 137
|
||||||
|
bcd v6
|
||||||
|
load v2
|
||||||
|
i := imageok
|
||||||
|
if v0 != 1 then i := imagefalse
|
||||||
|
if v1 != 3 then i := imagefalse
|
||||||
|
if v2 != 7 then i := imagefalse
|
||||||
|
sprite x2 y 4
|
||||||
|
#test 1x
|
||||||
|
y := 26
|
||||||
|
drawop im1 imX
|
||||||
|
jump test1x
|
||||||
|
: endtest
|
||||||
|
loop
|
||||||
|
again
|
||||||
Binary file not shown.
121
src/chip8.v
121
src/chip8.v
|
|
@ -3,29 +3,30 @@
|
||||||
import rand
|
import rand
|
||||||
|
|
||||||
const font := [
|
const font := [
|
||||||
[0xF0, 0x90, 0x90, 0x90, 0xF0], // 0
|
[u8(0xF0), u8(0x90), u8(0x90), u8(0x90), u8(0xF0)], // 0
|
||||||
[0x20, 0x60, 0x20, 0x20, 0x70], // 1
|
[u8(0x20), u8(0x60), u8(0x20), u8(0x20), u8(0x70)], // 1
|
||||||
[0xF0, 0x10, 0xF0, 0x80, 0xF0], // 2
|
[u8(0xF0), u8(0x10), u8(0xF0), u8(0x80), u8(0xF0)], // 2
|
||||||
[0xF0, 0x10, 0xF0, 0x10, 0xF0], // 3
|
[u8(0xF0), u8(0x10), u8(0xF0), u8(0x10), u8(0xF0)], // 3
|
||||||
[0x90, 0x90, 0xF0, 0x10, 0x10], // 4
|
[u8(0x90), u8(0x90), u8(0xF0), u8(0x10), u8(0x10)], // 4
|
||||||
[0xF0, 0x80, 0xF0, 0x10, 0xF0], // 5
|
[u8(0xF0), u8(0x80), u8(0xF0), u8(0x10), u8(0xF0)], // 5
|
||||||
[0xF0, 0x80, 0xF0, 0x90, 0xF0], // 6
|
[u8(0xF0), u8(0x80), u8(0xF0), u8(0x90), u8(0xF0)], // 6
|
||||||
[0xF0, 0x10, 0x20, 0x40, 0x40], // 7
|
[u8(0xF0), u8(0x10), u8(0x20), u8(0x40), u8(0x40)], // 7
|
||||||
[0xF0, 0x90, 0xF0, 0x90, 0xF0], // 8
|
[u8(0xF0), u8(0x90), u8(0xF0), u8(0x90), u8(0xF0)], // 8
|
||||||
[0xF0, 0x90, 0xF0, 0x10, 0xF0], // 9
|
[u8(0xF0), u8(0x90), u8(0xF0), u8(0x10), u8(0xF0)], // 9
|
||||||
[0xF0, 0x90, 0xF0, 0x90, 0x90], // A
|
[u8(0xF0), u8(0x90), u8(0xF0), u8(0x90), u8(0x90)], // A
|
||||||
[0xE0, 0x90, 0xE0, 0x90, 0xE0], // B
|
[u8(0xE0), u8(0x90), u8(0xE0), u8(0x90), u8(0xE0)], // B
|
||||||
[0xF0, 0x80, 0x80, 0x80, 0xF0], // C
|
[u8(0xF0), u8(0x80), u8(0x80), u8(0x80), u8(0xF0)], // C
|
||||||
[0xE0, 0x90, 0x90, 0x90, 0xE0], // D
|
[u8(0xE0), u8(0x90), u8(0x90), u8(0x90), u8(0xE0)], // D
|
||||||
[0xF0, 0x80, 0xF0, 0x80, 0xF0], // E
|
[u8(0xF0), u8(0x80), u8(0xF0), u8(0x80), u8(0xF0)], // E
|
||||||
[0xF0, 0x80, 0xF0, 0x80, 0x80], // F
|
[u8(0xF0), u8(0x80), u8(0xF0), u8(0x80), u8(0x80)], // F
|
||||||
]
|
]
|
||||||
|
|
||||||
struct Screen{
|
struct Screen{
|
||||||
pub mut:
|
pub:
|
||||||
display_width int = 64
|
display_width int = 64
|
||||||
display_height int = 32
|
display_height int = 32
|
||||||
display [64][32]u8
|
mut:
|
||||||
|
display [32][64]u8
|
||||||
}
|
}
|
||||||
|
|
||||||
const mem_size = 4096
|
const mem_size = 4096
|
||||||
|
|
@ -37,44 +38,52 @@ struct Chip8{
|
||||||
ram [mem_size]u8
|
ram [mem_size]u8
|
||||||
v [num_of_registers]u8
|
v [num_of_registers]u8
|
||||||
screen Screen
|
screen Screen
|
||||||
pc u16
|
pc u16 = 0x200
|
||||||
i int
|
i int
|
||||||
stack Stack
|
stack Stack
|
||||||
delay_timer u8
|
delay_timer u8
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut chip Chip8) start_cpu(){
|
fn (mut chip Chip8) start_cpu(){
|
||||||
|
|
||||||
|
chip.screen = Screen{}
|
||||||
|
|
||||||
|
mut index := 0
|
||||||
// load font in the memory
|
// load font in the memory
|
||||||
for sprite in font {
|
for sprite in font {
|
||||||
for byte_sprite in sprite {
|
chip.set_ram(sprite, index)
|
||||||
chip.set_ram(u8(byte_sprite))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut chip Chip8) run(){
|
fn (mut chip Chip8) run(){
|
||||||
instruction := chip.fetch()
|
|
||||||
chip.decode_and_run(instruction)
|
for{
|
||||||
|
mut instruction := chip.fetch()
|
||||||
|
println(instruction)
|
||||||
|
chip.decode_and_run(instruction)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut chip Chip8) set_ram(instruction u8) {
|
|
||||||
chip.ram[chip.pc] = instruction
|
fn (mut chip Chip8) set_ram(instructions []u8, index int) {
|
||||||
|
|
||||||
|
mut j := index
|
||||||
|
for i := 0; i < instructions.len; i++ {
|
||||||
|
chip.ram[j] = instructions[i]
|
||||||
|
j++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (chip Chip8) get_instruction() u8{
|
fn (mut chip Chip8) fetch() u16{
|
||||||
instruction := chip.ram[chip.pc]
|
|
||||||
return instruction
|
|
||||||
}
|
|
||||||
|
|
||||||
fn (chip Chip8) fetch() u16{
|
|
||||||
|
|
||||||
mut instruction := u16(0x00)
|
mut instruction := u16(0x00)
|
||||||
mut half_instruction := chip.get_instruction()
|
|
||||||
|
|
||||||
|
mut half_instruction := chip.ram[chip.pc]
|
||||||
|
|
||||||
instruction = instruction | half_instruction
|
instruction = instruction | half_instruction
|
||||||
instruction = instruction << 8
|
instruction = instruction << 8
|
||||||
half_instruction = chip.get_instruction()
|
half_instruction = chip.ram[chip.pc + 1]
|
||||||
|
|
||||||
instruction = instruction | half_instruction
|
instruction = instruction | half_instruction
|
||||||
|
|
||||||
return instruction
|
return instruction
|
||||||
|
|
@ -86,6 +95,7 @@ fn (mut chip Chip8) decode_and_run(instruction u16) {
|
||||||
|
|
||||||
mut opcode_msb := instruction & 0xF000
|
mut opcode_msb := instruction & 0xF000
|
||||||
mut opcode_lsb := instruction & 0x00FF
|
mut opcode_lsb := instruction & 0x00FF
|
||||||
|
mut is_jump := false
|
||||||
|
|
||||||
match opcode_msb{
|
match opcode_msb{
|
||||||
|
|
||||||
|
|
@ -99,8 +109,8 @@ fn (mut chip Chip8) decode_and_run(instruction u16) {
|
||||||
|
|
||||||
0x00E0 {
|
0x00E0 {
|
||||||
|
|
||||||
for i in 0..chip.screen.display_width {
|
for i := 0; i < chip.screen.display_height; i++{
|
||||||
for j in 0..chip.screen.display_height {
|
for j := 0; j < chip.screen.display_width; j++ {
|
||||||
chip.screen.display[i][j] = 0
|
chip.screen.display[i][j] = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -116,6 +126,7 @@ fn (mut chip Chip8) decode_and_run(instruction u16) {
|
||||||
0x1000 {
|
0x1000 {
|
||||||
nnn = instruction & 0x0FFF
|
nnn = instruction & 0x0FFF
|
||||||
chip.pc = u8(nnn)
|
chip.pc = u8(nnn)
|
||||||
|
is_jump = true
|
||||||
// Jumps to address NNN
|
// Jumps to address NNN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,6 +136,7 @@ fn (mut chip Chip8) decode_and_run(instruction u16) {
|
||||||
|
|
||||||
chip.stack.push(chip.pc)
|
chip.stack.push(chip.pc)
|
||||||
chip.pc = u16(nnn)
|
chip.pc = u16(nnn)
|
||||||
|
is_jump = true
|
||||||
// Calls subroutine at NNN
|
// Calls subroutine at NNN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -153,7 +165,7 @@ fn (mut chip Chip8) decode_and_run(instruction u16) {
|
||||||
}
|
}
|
||||||
|
|
||||||
0x6000 {
|
0x6000 {
|
||||||
x = instruction & 0xF00
|
x = (instruction & 0xF00) >> 8
|
||||||
nn = instruction & 0x00FF
|
nn = instruction & 0x00FF
|
||||||
|
|
||||||
chip.v[x] = u8(nn)
|
chip.v[x] = u8(nn)
|
||||||
|
|
@ -161,7 +173,7 @@ fn (mut chip Chip8) decode_and_run(instruction u16) {
|
||||||
}
|
}
|
||||||
|
|
||||||
0x7000 {
|
0x7000 {
|
||||||
x = instruction & 0xF00
|
x = (instruction & 0xF00) >> 8
|
||||||
nn = instruction & 0x00FF
|
nn = instruction & 0x00FF
|
||||||
|
|
||||||
chip.v[x] += u8(nn)
|
chip.v[x] += u8(nn)
|
||||||
|
|
@ -273,6 +285,7 @@ fn (mut chip Chip8) decode_and_run(instruction u16) {
|
||||||
nnn = instruction & 0x0FFF
|
nnn = instruction & 0x0FFF
|
||||||
|
|
||||||
chip.pc = u16(nnn + chip.v[0])
|
chip.pc = u16(nnn + chip.v[0])
|
||||||
|
is_jump = true
|
||||||
}
|
}
|
||||||
|
|
||||||
0xC000 {
|
0xC000 {
|
||||||
|
|
@ -289,23 +302,33 @@ fn (mut chip Chip8) decode_and_run(instruction u16) {
|
||||||
y = (instruction & 0x00F0) >> 4
|
y = (instruction & 0x00F0) >> 4
|
||||||
n = (instruction & 0x000F)
|
n = (instruction & 0x000F)
|
||||||
|
|
||||||
|
mut regvy := u8(chip.v[y] % chip.screen.display_height)
|
||||||
|
mut regvx := u8(chip.v[x] % chip.screen.display_width)
|
||||||
|
|
||||||
chip.v[f] = 0
|
chip.v[f] = 0
|
||||||
|
|
||||||
for y_coord := 0; y_coord < n; y_coord++ {
|
for y_coord := 0; y_coord < n; y_coord++ {
|
||||||
|
|
||||||
regvy := chip.v[y + y_coord] & chip.screen.display_height-1
|
|
||||||
|
regn := chip.ram[chip.i + y_coord]
|
||||||
|
|
||||||
for x_coord := 0; x_coord < 8; x_coord++ {
|
for x_coord := 0; x_coord < 8; x_coord++ {
|
||||||
|
|
||||||
regvx := chip.v[x + x_coord] & chip.screen.display_width-1
|
if (regvx + x_coord) < chip.screen.display_width && (regvy + y_coord) < chip.screen.display_height {
|
||||||
|
|
||||||
|
if regn & (0x80 >> x_coord) == 1 && chip.screen.display[regvy + y_coord][regvx + x_coord] == 1 {
|
||||||
|
chip.v[f] = 1
|
||||||
|
chip.screen.display[regvy + y_coord][regvx + x_coord] = 0
|
||||||
|
}
|
||||||
|
|
||||||
if chip.screen.display[regvx + y_coord][regvy + x_coord] == 1 {
|
|
||||||
chip.v[f] = 1
|
chip.screen.display[regvy + y_coord][regvx + x_coord] = chip.ram[chip.i + y_coord]
|
||||||
chip.screen.display[regvx + y_coord][regvy + x_coord] = 0
|
|
||||||
|
regvx = u8(chip.v[x + x_coord] % chip.screen.display_width)
|
||||||
}
|
}
|
||||||
|
|
||||||
chip.screen.display[regvx + y_coord][regvy + x_coord] = chip.ram[chip.i + y_coord]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
regvy = u8(chip.v[y + y_coord] % chip.screen.display_height)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -372,6 +395,6 @@ fn (mut chip Chip8) decode_and_run(instruction u16) {
|
||||||
panic('Invalid instruction!')
|
panic('Invalid instruction!')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !is_jump { chip.pc += 2 }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
58
src/main.v
58
src/main.v
|
|
@ -12,11 +12,10 @@ struct Emulator{
|
||||||
is_graphic bool = is_graphic()
|
is_graphic bool = is_graphic()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (emulator Emulator) draw_block(i int, j int, mut ctx gg.Context) {
|
fn (mut emulator Emulator) draw_block(i f32, j f32) {
|
||||||
emulator.graphic.draw_rect_filled(f32((j - 1) * 20) + 1, f32((i - 1) * 20), f32(20 - 1), f32(20 - 1), gx.rgb(255,255,255))
|
emulator.graphic.draw_rect_filled(f32((j - 1) * 20) + 14, f32((i - 1) * 20), f32(20 - 1), f32(20 - 1), gx.rgb(255,255,255))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn (mut emulator Emulator) load_rom() !{
|
fn (mut emulator Emulator) load_rom() !{
|
||||||
|
|
||||||
arguments := os.args.clone()
|
arguments := os.args.clone()
|
||||||
|
|
@ -29,9 +28,9 @@ fn (mut emulator Emulator) load_rom() !{
|
||||||
println(' Loading ROM in the memory...\n')
|
println(' Loading ROM in the memory...\n')
|
||||||
load_animate()
|
load_animate()
|
||||||
|
|
||||||
for instruction in file.read_bytes_at(1024, 0) {
|
mut instructions := file.read_bytes_at(1024, 0)
|
||||||
emulator.chip8.set_ram(u8(instruction))
|
mut index := 0x200
|
||||||
}
|
emulator.chip8.set_ram(instructions, index)
|
||||||
|
|
||||||
println('ROM successfully loaded into memory!')
|
println('ROM successfully loaded into memory!')
|
||||||
|
|
||||||
|
|
@ -40,29 +39,21 @@ fn (mut emulator Emulator) load_rom() !{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut emulator Emulator) draw_screen(){
|
fn draw_screen(mut emulator Emulator){
|
||||||
|
|
||||||
emulator.graphic.begin()
|
|
||||||
|
|
||||||
display_height := emulator.chip8.screen.display_height
|
display_height := emulator.chip8.screen.display_height
|
||||||
display_width := emulator.chip8.screen.display_width
|
display_width := emulator.chip8.screen.display_width
|
||||||
|
|
||||||
mut buf := []u8{len: display_height*display_width}
|
for y := 0; y < display_height; y++ {
|
||||||
mut i := 0
|
for x := 0; x < display_width; x++ {
|
||||||
|
|
||||||
for y := 0; y < emulator.chip8.screen.display_height; y++ {
|
|
||||||
for x := 0; x < emulator.chip8.screen.display_width; x++ {
|
|
||||||
|
|
||||||
pixel := emulator.chip8.screen.display[y][x]
|
pixel := emulator.chip8.screen.display[y][x]
|
||||||
|
|
||||||
buf[i] = u8((0xFFFFFF00 * pixel) | 0x000000FF);
|
if pixel == 1 {
|
||||||
i++
|
emulator.draw_block(f32(y*10), f32(x*10))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
emulator.graphic.create_image_from_memory(unsafe{ &buf[0] }, buf.len) or { panic(err) }
|
|
||||||
emulator.graphic.end()
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut emulator Emulator) show_display(){
|
fn (mut emulator Emulator) show_display(){
|
||||||
|
|
@ -147,18 +138,14 @@ fn is_graphic() bool{
|
||||||
return os.environ()['DISPLAY'] != ''
|
return os.environ()['DISPLAY'] != ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn frame(){
|
||||||
|
print('oi')
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
mut emulator := Emulator{
|
mut emulator := &Emulator{
|
||||||
|
|
||||||
chip8 : Chip8{}
|
chip8 : Chip8{}
|
||||||
|
|
||||||
graphic : gg.new_context(
|
|
||||||
bg_color: gx.rgb(0, 0, 0)
|
|
||||||
width: 1280
|
|
||||||
height: 640
|
|
||||||
window_title: 'V CHIP-8 Emulator'
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if emulator.is_graphic {
|
if emulator.is_graphic {
|
||||||
|
|
@ -166,9 +153,16 @@ fn main() {
|
||||||
emulator.load_rom()!
|
emulator.load_rom()!
|
||||||
emulator.chip8.start_cpu()
|
emulator.chip8.start_cpu()
|
||||||
emulator.chip8.run()
|
emulator.chip8.run()
|
||||||
|
print('oi')
|
||||||
emulator.draw_screen()
|
emulator.graphic = gg.new_context(
|
||||||
emulator.show_display()
|
bg_color: gx.rgb(0, 0, 0)
|
||||||
|
width: 1280
|
||||||
|
height: 640
|
||||||
|
window_title: 'V CHIP-8 Emulator'
|
||||||
|
frame_fn : draw_screen
|
||||||
|
user_data: emulator
|
||||||
|
)
|
||||||
|
//emulator.show_display()
|
||||||
}else{
|
}else{
|
||||||
panic('System is not graphic!')
|
panic('System is not graphic!')
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ fn load_animate() {
|
||||||
|
|
||||||
mut bars := ['|','/','-','\\']
|
mut bars := ['|','/','-','\\']
|
||||||
|
|
||||||
for i := 0; i < 4000; i++ {
|
for i := 0; i < 2000; i++ {
|
||||||
print('[${bars[i%4]}]\r ')
|
print('[${bars[i%4]}]\r ')
|
||||||
time.sleep(400000)
|
time.sleep(400000)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue