mirror of
https://github.com/MiSTer-devel/MultiComp_MiSTer.git
synced 2026-04-19 03:04:38 +00:00
Initial Commit of the MuliComp. MuliComp is a port of Grant Searle's MultiComp to the MiSTer
127 lines
4.6 KiB
NASM
127 lines
4.6 KiB
NASM
;==================================================================================
|
|
; Contents of this file are copyright Grant Searle
|
|
;
|
|
; You have permission to use this for NON COMMERCIAL USE ONLY
|
|
; If you wish to use it elsewhere, please include an acknowledgement to myself.
|
|
;
|
|
; http://searle.hostei.com/grant/index.html
|
|
;
|
|
; eMail: home.micros01@btinternet.com
|
|
;
|
|
; If the above don't work, please perform an Internet search to see if I have
|
|
; updated the web page hosting service.
|
|
;
|
|
;==================================================================================
|
|
|
|
; Minimum 6850 ACIA serial I/O to run modified NASCOM Basic 4.7
|
|
|
|
|
|
RTS_HIGH .EQU 0D5H
|
|
RTS_LOW .EQU 095H
|
|
|
|
basicStarted .EQU $2000
|
|
TEMPSTACK .EQU $200F
|
|
|
|
CR .EQU 0DH
|
|
LF .EQU 0AH
|
|
CS .EQU 0CH ; Clear screen
|
|
|
|
.ORG $0000
|
|
;------------------------------------------------------------------------------
|
|
; Reset
|
|
|
|
RST00 DI ;Disable interrupts
|
|
JP INIT ;Initialize Hardware and go
|
|
|
|
;------------------------------------------------------------------------------
|
|
; TX a character over RS232
|
|
|
|
.ORG 0008H
|
|
RST08 JP TXA
|
|
|
|
;------------------------------------------------------------------------------
|
|
; RX a character over RS232 Channel A [Console], hold here until char ready.
|
|
|
|
.ORG 0010H
|
|
RST10 JP RXA
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Check serial status
|
|
|
|
.ORG 0018H
|
|
RST18 JP CKINCHAR
|
|
|
|
;------------------------------------------------------------------------------
|
|
RXA:
|
|
waitForChar: call CKINCHAR
|
|
JR Z, waitForChar
|
|
IN A,($81)
|
|
RET ; Char ready in A
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
TXA: PUSH AF ; Store character
|
|
conout1: IN A,($80) ; Status byte
|
|
BIT 1,A ; Set Zero flag if still transmitting character
|
|
JR Z,conout1 ; Loop until flag signals ready
|
|
POP AF ; Retrieve character
|
|
OUT ($81),A ; Output the character
|
|
RET
|
|
|
|
;------------------------------------------------------------------------------
|
|
CKINCHAR
|
|
IN A,($80) ; Status byte
|
|
AND $01
|
|
CP $0 ; Z flag set if no char
|
|
RET
|
|
|
|
PRINT: LD A,(HL) ; Get character
|
|
OR A ; Is it $00 ?
|
|
RET Z ; Then RETurn on terminator
|
|
RST 08H ; Print it
|
|
INC HL ; Next Character
|
|
JR PRINT ; Continue until $00
|
|
RET
|
|
;------------------------------------------------------------------------------
|
|
INIT:
|
|
LD HL,TEMPSTACK ; Temp stack
|
|
LD SP,HL ; Set up a temporary stack
|
|
LD A,RTS_LOW
|
|
OUT ($80),A ; Initialise ACIA
|
|
LD HL,SIGNON1 ; Sign-on message
|
|
CALL PRINT ; Output string
|
|
LD A,(basicStarted); Check the BASIC STARTED flag
|
|
CP 'Y' ; to see if this is power-up
|
|
JR NZ,COLDSTART ; If not BASIC started then always do cold start
|
|
LD HL,SIGNON2 ; Cold/warm message
|
|
CALL PRINT ; Output string
|
|
CORW:
|
|
CALL RXA
|
|
AND %11011111 ; lower to uppercase
|
|
CP 'C'
|
|
JR NZ, CHECKWARM
|
|
RST 08H
|
|
LD A,$0D
|
|
RST 08H
|
|
LD A,$0A
|
|
RST 08H
|
|
COLDSTART: LD A,'Y' ; Set the BASIC STARTED flag
|
|
LD (basicStarted),A
|
|
JP $0100 ; Start BASIC COLD
|
|
CHECKWARM:
|
|
CP 'W'
|
|
JR NZ, CORW
|
|
RST 08H
|
|
LD A,$0D
|
|
RST 08H
|
|
LD A,$0A
|
|
RST 08H
|
|
JP $0103 ; Start BASIC WARM
|
|
|
|
SIGNON1: .BYTE CS
|
|
.BYTE "Z80 SBC By Grant Searle",CR,LF,0
|
|
SIGNON2: .BYTE CR,LF
|
|
.BYTE "Cold or warm start (C or W)? ",0
|
|
|
|
.END
|