mirror of https://github.com/Kris-Sekula/NABU.git
Add files via upload
This commit is contained in:
parent
5fa213b019
commit
7ce13a0e29
|
@ -0,0 +1,270 @@
|
|||
DATAP EQU $A0 ; VDP Data port
|
||||
CMDP EQU $A1 ; VDP Command port
|
||||
AY EQU $40 ; VDP Data port
|
||||
KBPORT EQU $90 ; keyboard data port
|
||||
HCCA EQU $80 ; Network adapter
|
||||
|
||||
ORG $140D
|
||||
|
||||
; DI ; We don't know, how interrupts works in this system, so we disable them.
|
||||
|
||||
; CALL KBD_CTRL_OUT
|
||||
; CALL KBD_CTRL_OUT
|
||||
; CALL KBD_CTRL_OUT
|
||||
; CALL KBD_CTRL_OUT
|
||||
; CALL KBD_CTRL_OUT
|
||||
; LD a, $40
|
||||
; CALL KBD_CTRL_OUT ; write $40 to Kbd statuscontrol = internal reset
|
||||
; LD a, $4e
|
||||
; CALL KBD_CTRL_OUT ; write $4e to Kbd statuscontrol = 8N1, 16x
|
||||
; LD a, $04
|
||||
; CALL KBD_CTRL_OUT ; write $04 to Kbd statuscontrol = only receive enable
|
||||
|
||||
; Let's set VDP write address to #0000
|
||||
XOR A
|
||||
OUT (CMDP),A
|
||||
LD A,#40
|
||||
OUT (CMDP),A
|
||||
|
||||
; Now let's clear first 16Kb of VDP memory
|
||||
LD B,0
|
||||
LD HL,#3FFF
|
||||
LD C,DATAP
|
||||
CLEAR:
|
||||
OUT (C),B
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
NOP ; Let's wait 8 clock cycles just in case VDP is not quick enough.
|
||||
NOP
|
||||
JR NZ, CLEAR
|
||||
|
||||
;----------------------------------------
|
||||
; Register 0 (0x80) to #0
|
||||
;
|
||||
; Set mode selection bit M3 (maybe also M4 & M5) to zero and
|
||||
; disable external video & horizontal interrupt
|
||||
LD C,CMDP
|
||||
LD E,#80
|
||||
|
||||
OUT (C),A
|
||||
OUT (C),E
|
||||
;----------------------------------------
|
||||
; Register 1 (0x81) to #50
|
||||
;
|
||||
; Select 40 column mode, enable screen and disable vertical interrupt
|
||||
|
||||
LD A,#50
|
||||
INC E
|
||||
OUT (C),A
|
||||
OUT (C),E
|
||||
;----------------------------------------
|
||||
; Register 2 (0x82) to #0
|
||||
;
|
||||
; Set pattern name table to #0000
|
||||
|
||||
XOR A
|
||||
INC E
|
||||
OUT (C),A
|
||||
OUT (C),E
|
||||
;----------------------------------------
|
||||
; Register 3 (0x83) is ignored as 40 column mode does not need color table
|
||||
;
|
||||
INC E
|
||||
;----------------------------------------
|
||||
; Register 4 (0x84) to #1
|
||||
; Set pattern generator table to #800
|
||||
|
||||
INC A
|
||||
INC E
|
||||
|
||||
OUT (C),A
|
||||
OUT (C),E
|
||||
;----------------------------------------
|
||||
; Registers 5 (0x85) (Sprite attribute) & 6 (Sprite pattern) are ignored
|
||||
; as 40 column mode does not have sprites
|
||||
|
||||
INC E
|
||||
INC E
|
||||
;----------------------------------------
|
||||
; Register 7 (0x87) for color FORE/BACK
|
||||
|
||||
; LD A,#F2 ; light blue
|
||||
; LD A,#F3 ; light blue
|
||||
; LD A,#F4 ; blue
|
||||
; LD A,#F5 ; nabu blue
|
||||
; LD A,#F7 ; blue
|
||||
; LD A,#F8 ; poops1
|
||||
; LD A,#F9 ; poops2
|
||||
; LD A,#FC ; blue/green
|
||||
; LD A,$FA ; yellow/green
|
||||
; LD A,#FF ; white
|
||||
LD A,#F0 ; white on black
|
||||
INC E
|
||||
OUT (C),A
|
||||
OUT (C),E
|
||||
;----------------------------------------
|
||||
|
||||
; Let's set VDP write address to #808 so, that we can write
|
||||
; character set to memory
|
||||
; (No need to write SPACE it is clear char already)
|
||||
LD A,8
|
||||
OUT (C),A
|
||||
LD A,#48
|
||||
OUT (C),A
|
||||
|
||||
; Let's copy character set
|
||||
LD HL,CHARS
|
||||
LD B, CHARS_END-CHARS
|
||||
COPYCHARS:
|
||||
LD A,(HL)
|
||||
OUT (DATAP),A
|
||||
INC HL
|
||||
NOP ; Let's wait 8 clock cycles just in case VDP is not quick enough.
|
||||
NOP
|
||||
DJNZ COPYCHARS
|
||||
|
||||
; Let's set write address to start of name table
|
||||
XOR A
|
||||
OUT (C),A
|
||||
LD A,#40
|
||||
OUT (C),A
|
||||
|
||||
; Let's put characters to screen
|
||||
LD HL,ORDER
|
||||
LD B,ORDER_END-ORDER
|
||||
COPYORDER:
|
||||
LD A,(HL)
|
||||
OUT (DATAP),A
|
||||
INC HL
|
||||
|
||||
JR OVERNMI
|
||||
NOP
|
||||
NOP
|
||||
|
||||
; Here is address #66, that is entry for NMI
|
||||
RETN ;Return from NMI
|
||||
|
||||
OVERNMI:
|
||||
DJNZ COPYORDER
|
||||
|
||||
; The end
|
||||
halt
|
||||
GETKEY
|
||||
|
||||
IN a, (KBPORT+1)
|
||||
BIT 1, a
|
||||
JP z, GETKEY
|
||||
|
||||
IN a, (KBPORT)
|
||||
OUT (HCCA), a
|
||||
PUSH af
|
||||
SUB $30 ; subtract 0x30 to make the keyboard code into characters (see ascii chart)
|
||||
;JR c, EXIT ;jmp if 0 pressed
|
||||
JP GETKEY
|
||||
EXIT
|
||||
JP ($FFEE)
|
||||
|
||||
|
||||
|
||||
KBD_CTRL_OUT
|
||||
OUT (KBPORT + 1),a
|
||||
NOP
|
||||
NOP
|
||||
NOP
|
||||
NOP
|
||||
NOP
|
||||
RET
|
||||
|
||||
; Character set:
|
||||
; --------------
|
||||
ORDER:
|
||||
DEFB 1,2,3,3,4,0,5,4,6,3,7,8,0,0,9
|
||||
ORDER_END:
|
||||
|
||||
CHARS:
|
||||
|
||||
; H 1
|
||||
DEFB %10001000
|
||||
DEFB %10001000
|
||||
DEFB %10001000
|
||||
DEFB %11111000
|
||||
DEFB %10001000
|
||||
DEFB %10001000
|
||||
DEFB %10001000
|
||||
DEFB %00000000
|
||||
; e 2
|
||||
DEFB %00000000
|
||||
DEFB %00000000
|
||||
DEFB %01110000
|
||||
DEFB %10001000
|
||||
DEFB %11111000
|
||||
DEFB %10000000
|
||||
DEFB %01110000
|
||||
DEFB %00000000
|
||||
; l 3
|
||||
DEFB %01100000
|
||||
DEFB %00100000
|
||||
DEFB %00100000
|
||||
DEFB %00100000
|
||||
DEFB %00100000
|
||||
DEFB %00100000
|
||||
DEFB %01110000
|
||||
DEFB %00000000
|
||||
; o 4
|
||||
DEFB %00000000
|
||||
DEFB %00000000
|
||||
DEFB %01110000
|
||||
DEFB %10001000
|
||||
DEFB %10001000
|
||||
DEFB %10001000
|
||||
DEFB %01110000
|
||||
DEFB %00000000
|
||||
; W 5
|
||||
DEFB %10001000
|
||||
DEFB %10001000
|
||||
DEFB %10001000
|
||||
DEFB %10101000
|
||||
DEFB %10101000
|
||||
DEFB %11011000
|
||||
DEFB %10001000
|
||||
DEFB %00000000
|
||||
|
||||
; r 6
|
||||
DEFB %00000000
|
||||
DEFB %00000000
|
||||
DEFB %10110000
|
||||
DEFB %11001000
|
||||
DEFB %10000000
|
||||
DEFB %10000000
|
||||
DEFB %10000000
|
||||
DEFB %00000000
|
||||
; d 7
|
||||
DEFB %00001000
|
||||
DEFB %00001000
|
||||
DEFB %01101000
|
||||
DEFB %10011000
|
||||
DEFB %10001000
|
||||
DEFB %10011000
|
||||
DEFB %01101000
|
||||
DEFB %00000000
|
||||
; ! 8
|
||||
DEFB %00011000
|
||||
DEFB %00011000
|
||||
DEFB %00011000
|
||||
DEFB %00001000
|
||||
DEFB %00001000
|
||||
DEFB %00001000
|
||||
DEFB %00000000
|
||||
DEFB %00001000
|
||||
; TEST 9
|
||||
DEFB %10000001
|
||||
DEFB %00000000
|
||||
DEFB %00000000
|
||||
DEFB %00000000
|
||||
DEFB %00000000
|
||||
DEFB %00000000
|
||||
DEFB %00000000
|
||||
DEFB %10000001
|
||||
CHARS_END:
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
@echo off
|
||||
echo "Compiling"
|
||||
sjasmplus.exe --raw="hello.bin" "hello.asm"
|
||||
echo "Coverting to hex"
|
||||
pause
|
||||
srec_cat.exe "hello.bin" -binary -offset 0x0140D -o "hello.hex" -intel -address-length=2 -obs=16
|
||||
:: you can alos use bin2hex part of python intelhex library 'pip install intelhex'
|
||||
:: bin2hex.py --offset=0x140d hello.bin hello.hex
|
||||
pause
|
||||
echo g0140d >> hello.hex
|
Binary file not shown.
|
@ -0,0 +1,16 @@
|
|||
:10140D00AFD3A13E40D3A1060021FF3F0EA0ED4179
|
||||
:10141D002B7CB5000020F70EA11E80ED79ED593E15
|
||||
:10142D00501CED79ED59AF1CED79ED591C3C1CEDBF
|
||||
:10143D0079ED591C1C3EF01CED79ED593E08ED7906
|
||||
:10144D003E48ED7921A21406487ED3A0230000105A
|
||||
:10145D00F8AFED793E40ED79219314060F7ED3A0C0
|
||||
:10146D002318040000ED4510F476DB91CB4FCA77BD
|
||||
:10147D0014DB90D380F5D630C37714C3EEFFD39130
|
||||
:10148D000000000000C90102030304000504060367
|
||||
:10149D000708000009888888F8888888000000708F
|
||||
:1014AD0088F88070006020202020207000000070DF
|
||||
:1014BD008888887000888888A8A8D888000000B01F
|
||||
:1014CD00C8808080000808689888986800181818E7
|
||||
:0D14DD0008080800088100000000000081E0
|
||||
:00000001FF
|
||||
g0140d
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue