Skip to content

Instantly share code, notes, and snippets.

@Rustywolf
Created March 16, 2021 05:20
Show Gist options
  • Save Rustywolf/68f506e1d8239a02dff49260599af94d to your computer and use it in GitHub Desktop.
Save Rustywolf/68f506e1d8239a02dff49260599af94d to your computer and use it in GitHub Desktop.
ROM = 0x0000
IO = 0xA000
RAM = 0xA100
CHARACTERS = 0x8000
FOREGROUND = 0x8800
BACKGROUND = 0x9000
CHARSET = 0x9800
SCREENWIDTH = 40
SCREENHEIGHT = 30
yOffset = (RAM+0)
colourOffset = (RAM+1)
colourOffsetHigh = (colourOffset+1)
backgroundOffset = (RAM+3)
backgroundOffsetHigh = (backgroundOffset+1)
characterOffset = (RAM+5)
characterOffsetHigh = (characterOffset+1)
start:
MOV #0 *yOffset
MOV #0 *colourOffset
MOV #((colours & 0xFF00) >> 8) *colourOffsetHigh
MOV #0 *backgroundOffset
MOV #((BACKGROUND & 0xFF00) >> 8) *backgroundOffsetHigh
MOV #0 *characterOffset
MOV #((CHARACTERS & 0xFF00) >> 8) *characterOffsetHigh
store_char:
MOV #0b10101010 *(CHARSET+8)
MOV #0b01010101 *(CHARSET+9)
MOV #0b10101010 *(CHARSET+10)
MOV #0b01010101 *(CHARSET+11)
MOV #0b10101010 *(CHARSET+12)
MOV #0b01010101 *(CHARSET+13)
MOV #0b10101010 *(CHARSET+14)
MOV #0b01010101 *(CHARSET+15)
xLoop_start:
MOV #0 *backgroundOffset
MOV #0 *characterOffset
MOV #0 ACC
xLoop:
PSH ACC
MOV #01 **characterOffset
MOV **colourOffset ACC
MOV ACC **backgroundOffset
MOV *colourOffset ACC
ADD #1
MOV ACC *colourOffset
MOV *backgroundOffset ACC
ADD #1
MOV ACC *backgroundOffset
MOV *characterOffset ACC
ADD #1
MOV ACC *characterOffset
PLL
ADD #1
CMP #40
JEZ *xLoop2_start
JMP *xLoop
xLoop2_start:
MOV #64 *backgroundOffset
MOV #64 *characterOffset
MOV *yOffset ACC
ADD #1
MOV ACC *yOffset
MOV ACC *colourOffset
MOV #0 ACC
xLoop2:
PSH ACC
MOV #01 **characterOffset
MOV **colourOffset ACC
MOV ACC **backgroundOffset
MOV *colourOffset ACC
ADD #1
MOV ACC *colourOffset
MOV *backgroundOffset ACC
ADD #1
MOV ACC *backgroundOffset
MOV *characterOffset ACC
ADD #1
MOV ACC *characterOffset
PLL
ADD #1
CMP #40
JEZ *xLoop3_start
JMP *xLoop2
xLoop3_start:
MOV #128 *backgroundOffset
MOV #128 *characterOffset
MOV *yOffset ACC
ADD #1
MOV ACC *yOffset
MOV ACC *colourOffset
MOV #0 ACC
xLoop3:
PSH ACC
MOV #01 **characterOffset
MOV **colourOffset ACC
MOV ACC **backgroundOffset
MOV *colourOffset ACC
ADD #1
MOV ACC *colourOffset
MOV *backgroundOffset ACC
ADD #1
MOV ACC *backgroundOffset
MOV *characterOffset ACC
ADD #1
MOV ACC *characterOffset
PLL
ADD #1
CMP #40
JEZ *xLoop4_start
JMP *xLoop3
xLoop4_start:
MOV #192 *backgroundOffset
MOV #192 *characterOffset
MOV *yOffset ACC
ADD #1
MOV ACC *yOffset
MOV ACC *colourOffset
MOV #0 ACC
xLoop4:
PSH ACC
MOV #01 **characterOffset
MOV **colourOffset ACC
MOV ACC **backgroundOffset
MOV *colourOffset ACC
ADD #1
MOV ACC *colourOffset
MOV *backgroundOffset ACC
ADD #1
MOV ACC *backgroundOffset
MOV *characterOffset ACC
ADD #1
MOV ACC *characterOffset
PLL
ADD #1
CMP #40
JEZ *yLoop
JMP *xLoop4
yLoop:
MOV *backgroundOffsetHigh ACC
ADD #1
MOV ACC *backgroundOffsetHigh
MOV *characterOffsetHigh ACC
ADD #1
MOV ACC *characterOffsetHigh
MOV *yOffset ACC
ADD #1
MOV ACC *yOffset
MOV ACC *colourOffset
CMP #32
JEZ *pre_halt
JMP *xLoop_start
pre_halt:
MOV #1 *(0x8100)
MOV #1 *(0x8101)
MOV #1 *(0x8103)
MOV #1 *(0x8104)
MOV #1 *(0x8105)
MOV #1 *(0x8106) // Hack - Work out why these values are being written as 0
halt:
JMP *halt
// DATA
// Colours
.offset (ROM+0x0200)
colours:
.byte 0b11100100
.byte 0b11101000
.byte 0b11101100
.byte 0b11110000
.byte 0b11110100
.byte 0b11111000
.byte 0b11111100
.byte 0b11011100
.byte 0b10111100
.byte 0b10011100
.byte 0b01111100
.byte 0b01011100
.byte 0b00111100
.byte 0b00011100
.byte 0b00011101
.byte 0b00011110
.byte 0b00011111
.byte 0b00011011
.byte 0b00010111
.byte 0b00010011
.byte 0b00001111
.byte 0b00001011
.byte 0b00000111
.byte 0b00000011
.byte 0b00100011
.byte 0b01000011
.byte 0b01100011
.byte 0b10000011
.byte 0b10100011
.byte 0b11000011
.byte 0b11100011
.byte 0b11100010
.byte 0b11100001
.byte 0b11100000
.byte 0b11100100
.byte 0b11101000
.byte 0b11101100
.byte 0b11110000
.byte 0b11110100
.byte 0b11111000
.byte 0b11111100
.byte 0b11011100
.byte 0b10111100
.byte 0b10011100
.byte 0b01111100
.byte 0b01011100
.byte 0b00111100
.byte 0b00011100
.byte 0b00011101
.byte 0b00011110
.byte 0b00011111
.byte 0b00011011
.byte 0b00010111
.byte 0b00010011
.byte 0b00001111
.byte 0b00001011
.byte 0b00000111
.byte 0b00000011
.byte 0b00100011
.byte 0b01000011
.byte 0b01100011
.byte 0b10000011
.byte 0b10100011
.byte 0b11000011
.byte 0b11100011
.byte 0b11100010
.byte 0b11100001
.byte 0b11100000
.byte 0b11100100
.byte 0b11101000
.byte 0b11101100
.byte 0b11110000
.byte 0b11110100
.byte 0b11111000
.byte 0b11111100
.byte 0b11011100
.byte 0b10111100
.byte 0b10011100
.byte 0b01111100
.byte 0b01011100
.byte 0b00111100
.byte 0b00011100
.byte 0b00011101
.byte 0b00011110
.byte 0b00011111
.byte 0b00011011
.byte 0b00010111
.byte 0b00010011
.byte 0b00001111
.byte 0b00001011
.byte 0b00000111
.byte 0b00000011
.byte 0b00100011
.byte 0b01000011
.byte 0b01100011
.byte 0b10000011
.byte 0b10100011
.byte 0b11000011
.byte 0b11100011
.byte 0b11100010
.byte 0b11100001
.byte 0b11100000
.byte 0b11100100
.byte 0b11101000
.byte 0b11101100
.byte 0b11110000
.byte 0b11110100
.byte 0b11111000
.byte 0b11111100
.byte 0b11011100
.byte 0b10111100
.byte 0b10011100
.byte 0b01111100
.byte 0b01011100
.byte 0b00111100
.byte 0b00011100
.byte 0b00011101
.byte 0b00011110
.byte 0b00011111
.byte 0b00011011
.byte 0b00010111
.byte 0b00010011
.byte 0b00001111
.byte 0b00001011
.byte 0b00000111
.byte 0b00000011
.byte 0b00100011
.byte 0b01000011
.byte 0b01100011
.byte 0b10000011
.byte 0b10100011
.byte 0b11000011
.byte 0b11100011
.byte 0b11100010
.byte 0b11100001
.byte 0b11100000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment