summaryrefslogtreecommitdiff
path: root/ROMs/_old/hello_world.asm
blob: 1d812fbb7fd10643d624ad2d25a43404447523f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
.org $1FFF
JMP program

font:
    .include "font.bin"

program:
    MOV 0, V0 ; Load character #12
    MOV 0, V1 ; X position
    MOV 0, V2 ; Y position
    MOV 1, V3 ; Color (1 = white)
    CALL write_char ; Call function to write character
    SUS

write_char:
    ; V0: Character to write
    ; V1: X position
    ; V2: Y position
    ; V3: Color
    ; Write a character to the screen at (V1, V2) with color V3
    
    MUL V0, 64 ; V0 = Character * 64 (character size)
    MOV AX, V0 ; Store result back into character
    
    MUL V2, 64
    ADD AX, V1
    MOV AX, V4 ; V4 = X position + Y position * 64 (screen index)
    
    MOV V4, [$EFFF] ; Debug
    
    MOV [V0 + $2003], V5 ; Read character (1FFF + 4 since jump address is 1FFF)
    MOV V5, [$EFFF] ; Debug
    AND V5, $01 ; Mask to get first bit (color)
    MOV DX, V5
    MOV V5, [$EFFF] ; Debug
    MUL V5, V3 ; V5 = Character * Color (color index)
    MOV AX, V5 ; Store result into V5
    
    MOV V5, [$EFFF] ; Debug
    
    MOVB V5, [V4 + $402F] ; Write character to screen memory
    RET