From 41640fe33b90ec675cb86bf8179a44618ee1cfa5 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Sat, 30 Mar 2019 03:41:23 -0400 Subject: initial commit --- loader.s | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 loader.s (limited to 'loader.s') diff --git a/loader.s b/loader.s new file mode 100644 index 0000000..3b78fbd --- /dev/null +++ b/loader.s @@ -0,0 +1,114 @@ +; Use CIO to set up S: as GR.8 or GR.15 +; Relocatable code. +; Assemble with: +; cl65 -t none -o loader.xex loader.s + + .include "atari.inc" + +dataptr = FR0 +tmp = FR0+2 + +start = $0400 + +; segment header + .org start-6 + .word $FFFF + .word start + .word endmain-1 + + .org start + .byte $c0 ; default RAMTOP + .byte $0f ; GR. mode (8 or 15) + .byte $04 ; COLOR0 (01 pixels in GR.15) + .byte $08 ; COLOR1 (10 pixels in GR.15, 1 pixels in GR.8) + .byte $0c ; COLOR2 (11 pixels in GR.15, 0 pixels in GR.8) + .byte $00 ; COLOR3 (unused) + .byte $00 ; COLOR4 (00 pixels in GR.15, border in GR.8) + .byte $22 ; SDMCTL ($21 for narrow, $22 for normal) + +main: +; find our datablock's start address. this song and dance routine +; allows us to be fully relocatable, and have all the data in a +; single block (easily modified by the shell script that uses this). + + sei ; disable interrupts so they don't clobber the stack + lda #$00 + sta NMIEN + lda #$60 ; RTS opcode + sta dataptr + jsr dataptr +ret: ; here is where the RTS returns to + +; address is now in the stack area, fix it up and save it + tsx + dex + lda $100,x ; lo byte + sec + sbc #ret-start-1 + sta dataptr + lda $101,x ; hi byte + sbc #0 + sta dataptr+1 ; $d4/$d5 is now a pointer to 'start' + + cli ; re-enable interrupts + lda #$40 + sta NMIEN + +; set RAMTOP + ldy #0 + lda (dataptr),y + sta RAMTOP + +; close device #6 + ldx #$60 + lda #CLOSE + sta ICCOM,x + jsr CIOV + +; open device #6 (GRAPHICS command basically) + ldx #$60 + lda #$0c ; read/write, no +16 or +32 + sta ICAX1,x + ldy #$01 + lda (dataptr),y + sta ICAX2,x ; just the mode (8 or 16) + lda #OPEN + sta ICCOM,x + lda #'S' + sta tmp + lda #tmp + sta ICBAH,x + jsr CIOV + +; set up color regs + ldy #$02 +cloop: + lda (dataptr),y + sta COLOR0-2,y + iny + cpy #$07 + bne cloop + +; set up display width + lda (dataptr),y + sta SDMCTL + + rts +;;; put some stuff in screen RAM so we can see it +;; lda #$ff +;; sta $a150 +;; lda #$aa +;; sta $a151 +;; lda #$55 +;; sta $a152 +;;hang: jmp hang + +endmain: + +; segment header + .word INITAD + .word INITAD+1 + .word main + -- cgit v1.2.3