meh
This commit is contained in:
24
jacme/basic-boot.s
Normal file
24
jacme/basic-boot.s
Normal file
@@ -0,0 +1,24 @@
|
||||
; A BASIC booter, encodes `10 SYS <address>`.
|
||||
; Macrofied from http://www.pouet.net/topic.php?which=6541
|
||||
|
||||
!macro start_at .address {
|
||||
* = $0801
|
||||
!byte $0c,$08,$00,$00,$9e
|
||||
!if .address >= 10000 { !byte 48 + ((.address / 10000) % 10) }
|
||||
!if .address >= 1000 { !byte 48 + ((.address / 1000) % 10) }
|
||||
!if .address >= 100 { !byte 48 + ((.address / 100) % 10) }
|
||||
!if .address >= 10 { !byte 48 + ((.address / 10) % 10) }
|
||||
!byte $30 + (.address % 10), $00, $00, $00
|
||||
* = .address
|
||||
}
|
||||
|
||||
; A cooler example is to write
|
||||
;
|
||||
; 10 SYS <address>: REM <backspaces>Your comment
|
||||
;
|
||||
; When the user types LIST, he will just see
|
||||
;
|
||||
; 10 Your comment
|
||||
;
|
||||
; but still be able to run it.
|
||||
; For this, see http://codebase64.org/doku.php?id=base:acme-macro-tut
|
||||
18
jacme/constants.s
Normal file
18
jacme/constants.s
Normal file
@@ -0,0 +1,18 @@
|
||||
stack = $0100
|
||||
|
||||
screen = $0400
|
||||
rowlen = $28
|
||||
|
||||
bdcol = $D020
|
||||
bgcol = $D021
|
||||
|
||||
inputa = $DC00
|
||||
inputb = $DC01
|
||||
|
||||
ch1_freq_lo = $D400
|
||||
ch1_freq_hi = $D401
|
||||
ch1_duty_lo = $D402
|
||||
ch1_duty_hi = $D403
|
||||
ch1_ctl = $D404
|
||||
ch1_env_ad = $D405
|
||||
ch1_env_sr = $D406
|
||||
56
jacme/jimmy.s
Normal file
56
jacme/jimmy.s
Normal file
@@ -0,0 +1,56 @@
|
||||
!source "constants.s"
|
||||
!source "basic-boot.s"
|
||||
+start_at $0900
|
||||
|
||||
sei ; no interrupts pls
|
||||
|
||||
ldx #$00 ; Screen colours
|
||||
stx bdcol
|
||||
ldx #$08
|
||||
stx bgcol
|
||||
|
||||
jsr $e544 ; clear screen
|
||||
|
||||
;lda < message ; print message
|
||||
;pha
|
||||
;lda > message
|
||||
;pha
|
||||
jsr print_string
|
||||
;pla
|
||||
;pla
|
||||
|
||||
ldx #$01 ; start triangle wave
|
||||
ldy #$11
|
||||
stx ch1_freq_hi
|
||||
sty ch1_freq_lo
|
||||
ldx #$11
|
||||
stx ch1_ctl
|
||||
|
||||
.loop
|
||||
inc bdcol
|
||||
|
||||
lda inputb ; Scans the keyboard buffer
|
||||
cmp #$EF ; If user presses Space ($ef) then quit
|
||||
bne .loop
|
||||
|
||||
ldx #$08 ; kill sound
|
||||
stx ch1_ctl
|
||||
|
||||
rts
|
||||
|
||||
print_string:
|
||||
;lda message
|
||||
;sta PSL + 2
|
||||
;lda > message
|
||||
;sta PSL + 1
|
||||
|
||||
ldx #$00
|
||||
PSL lda message, x
|
||||
cmp #$0 ; return on null terminator
|
||||
beq +
|
||||
sta screen + rowlen, x
|
||||
inx
|
||||
jmp PSL
|
||||
+ rts
|
||||
|
||||
message !scr "welcome to scat os", 0
|
||||
Reference in New Issue
Block a user