From c2390be02870aa8cdc52f24d145247f6c1fca3a4 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Thu, 31 Jul 2025 07:23:40 +0300 Subject: fix(hello_world): Add .s to filename extension So files are correctly recongized as assembly --- hello_world/basic_starter.oph.s | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 hello_world/basic_starter.oph.s (limited to 'hello_world/basic_starter.oph.s') diff --git a/hello_world/basic_starter.oph.s b/hello_world/basic_starter.oph.s new file mode 100644 index 0000000..b893c08 --- /dev/null +++ b/hello_world/basic_starter.oph.s @@ -0,0 +1,28 @@ +; PRG format +; Contains two bytes of header data, address from which +; the rest of the file will be loaded into memory. +; BASIC memory starts at addr 2048, we effectively place "10 SYS 2064" +; and an end of program after it. Then immedately afterwards +; we place our command on addr 2064. +; When BASIC loads up, it runs "10 SYS 2064" and passes up execution there. +; Then, when we return, we get a zero which indicates termination. + +; The starting address is defined by the value (label or alias) "main". +; Since in basic we need to provide a decimal string, but we store a decimal value, we need +; to do this complicated convertion. +.alias main_addr_ch1 '0 + main / 10000 ; 65535 -> 6 +.alias main_addr_ch2 '0 + [main - main / 10000 * 10000] / 1000 ; 65535 -> 65535 - 60000 = 5535 / 1000 = 5 +.alias main_addr_ch3 '0 + [main - main / 1000 * 1000] / 100 ; 65535 -> 65535 - 65000 = 535 / 100 = 5 +.alias main_addr_ch4 '0 + [main - main / 100 * 100] / 10 ; 65535 -> 65535 - 65500 = 35 / 10 = 3 +.alias main_addr_ch5 '0 + main - main / 10 * 10 ; 65535 -> 65535 - 65530 = 5 + +.word $0801 ; Header -- addr 2049 +.org $0801 ; Program Counter + +.scope + .word _eop ; Next line addr (I guess it is used to tell how long the line is?) + .word 10 ; 10 (line of BASIC program) + .byte $9e," " ; SYS 2064 (opcode for SYS and null terminated string) + .byte main_addr_ch1,main_addr_ch2,main_addr_ch3,main_addr_ch4,main_addr_ch5,0 +_eop: .word 0 ; End of program +.scend -- cgit v1.3.1-23-gd82d