Create horses.text

This commit is contained in:
robjustice 2020-05-20 18:13:10 +10:00 committed by GitHub
parent d0f4dce14f
commit 7f3df62600
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 655 additions and 0 deletions

655
horses/horses.text Normal file
View File

@ -0,0 +1,655 @@
.PAGE
;
;----------------------------------------------------------------------
;
; "Horse Demo" Invokable Module for Business Basic
;
; by Andy Hertzfeld 09/04/80
;
;----------------------------------------------------------------------
;
.PROC HINIT
.REF WDEVNUM ;in HFRAME procedure
;
; Load text screen with the character codes for the horses
; and load the foreground/background colors.
;
;
; First get the device number of the console
;
BRK ;GET_DEV_NUM
.BYTE 084 ;GETDEVNUM SOS call
.WORD DEVBLOCK
;
LDA CDEVNUM
STA WDEVNUM ;Update the device number for later
;
LDY #00
LOOP LDA SCRNDAT1,Y
STA 0400,Y
LDA SCRNDAT2,Y
STA 0500,Y
LDA SCRNDAT3,Y
STA 0600,Y
LDA SCRNDAT4,Y
STA 0700,Y
LDA SCRNDAT5,Y
STA 0800,Y
LDA SCRNDAT6,Y
STA 0900,Y
LDA SCRNDAT7,Y
STA 0A00,Y
LDA SCRNDAT8,Y
STA 0B00,Y
INY
BNE LOOP
RTS
;
; Text screen data
; first 32 character codes are used for the horses
; MSB bit is set for inverse?
;
; 8 chars x 4 lines per horse
; eg
; 080,081,082,083,084,085,086,087 ;Line2
; 088,089,08A,08B,08C,08D,08E,08F ;Line3
; 090,091,092,093,094,095,096,097 ;Line4
; 098,099,09A,09B,09C,09D,09E,09F ;Line5
;
;
;
SCRNDAT1 .BYTE 000,000,000,000,000,000,000,000 ;Line1
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 088,089,08A,08B,08C,08D,08E,08F ;Line9
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 098,099,09A,09B,09C,09D,09E,09F ;Line17
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 000,000,000,000,000,000,000,000
.BYTE 080,081,082,083,084,085,086,087 ;Line2
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 090,091,092,093,094,095,096,097 ;Line10
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0 ;Line18
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 000,000,000,000,000,000,000,000
SCRNDAT2 .BYTE 088,089,08A,08B,08C,08D,08E,08F ;Line3
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 098,099,09A,09B,09C,09D,09E,09F ;Line11
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 000,000,000,000,000,000,000,000 ;Line19
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 090,091,092,093,094,095,096,097 ;Line4
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0 ;Line12
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 080,081,082,083,084,085,086,087 ;Line20
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 000,000,000,000,000,000,000,000
SCRNDAT3 .BYTE 098,099,09A,09B,09C,09D,09E,09F ;Line5
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 000,000,000,000,000,000,000,000 ;Line13
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 088,089,08A,08B,08C,08D,08E,08F ;Line21
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 000,000,000,000,000,000,000,000
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0 ;Line6
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 080,081,082,083,084,085,086,087 ;Line14
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 090,091,092,093,094,095,096,097 ;Line22
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 000,000,000,000,000,000,000,000
SCRNDAT4 .BYTE 000,000,000,000,000,000,000,000 ;Line7
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 088,089,08A,08B,08C,08D,08E,08F ;Line15
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 088,089,08A,08B,08C,08D,08E,08F
.BYTE 098,099,09A,09B,09C,09D,09E,09F ;Line23
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 098,099,09A,09B,09C,09D,09E,09F
.BYTE 000,000,000,000,000,000,000,000
.BYTE 080,081,082,083,084,085,086,087 ;Line8
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 080,081,082,083,084,085,086,087
.BYTE 090,091,092,093,094,095,096,097 ;Line16
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 090,091,092,093,094,095,096,097
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0 ;Line24
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 0A0,0A0,0A0,0A0,0A0,0A0,0A0,0A0
.BYTE 000,000,000,000,000,000,000,000
;
; Text foreground/background color data
;
SCRNDAT5 .BYTE 0EE,0EE,0EE,0EE,0EE,0EE,0EE,0EE ;Line1
.BYTE 0DD,0DD,0DD,0DD,0DD,0DD,0DD,0DD
.BYTE 0CC,0CC,0CC,0CC,0CC,0CC,0CC,0CC
.BYTE 0BB,0BB,0BB,0BB,0BB,0BB,0BB,0BB
.BYTE 0EE,0EE,0EE,0EE,0EE,0EE,0EE,0EE
.BYTE 040,040,040,040,040,040,040,040 ;Line9
.BYTE 03D,03D,03D,03D,03D,03D,03D,03D
.BYTE 07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 06A,06A,06A,06A,06A,06A,06A,06A
.BYTE 0D5,0D5,0D5,0D5,0D5,0D5,0D5,0D5
.BYTE 0E4,0E4,0E4,0E4,0E4,0E4,0E4,0E4 ;Line17
.BYTE 09A,09A,09A,09A,09A,09A,09A,09A
.BYTE 0D2,0D2,0D2,0D2,0D2,0D2,0D2,0D2
.BYTE 038,038,038,038,038,038,038,038
.BYTE 014,014,014,014,014,014,014,014
.BYTE 000,000,000,000,000,000,000,000
.BYTE 0E1,0E1,0E1,0E1,0E1,0E1,0E1,0E1 ;Line2
.BYTE 0D2,0D2,0D2,0D2,0D2,0D2,0D2,0D2
.BYTE 0C3,0C3,0C3,0C3,0C3,0C3,0C3,0C3
.BYTE 0B4,0B4,0B4,0B4,0B4,0B4,0B4,0B4
.BYTE 0E2,0E2,0E2,0E2,0E2,0E2,0E2,0E2
.BYTE 040,040,040,040,040,040,040,040 ;Line10
.BYTE 03D,03D,03D,03D,03D,03D,03D,03D
.BYTE 07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 06A,06A,06A,06A,06A,06A,06A,06A
.BYTE 0D5,0D5,0D5,0D5,0D5,0D5,0D5,0D5
.BYTE 000,000,000,000,000,000,000,000 ;Line18
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
SCRNDAT6 .BYTE 0E1,0E1,0E1,0E1,0E1,0E1,0E1,0E1 ;Line3
.BYTE 0D2,0D2,0D2,0D2,0D2,0D2,0D2,0D2
.BYTE 0C3,0C3,0C3,0C3,0C3,0C3,0C3,0C3
.BYTE 0B4,0B4,0B4,0B4,0B4,0B4,0B4,0B4
.BYTE 0E2,0E2,0E2,0E2,0E2,0E2,0E2,0E2
.BYTE 040,040,040,040,040,040,040,040 ;Line11
.BYTE 03D,03D,03D,03D,03D,03D,03D,03D
.BYTE 07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 06A,06A,06A,06A,06A,06A,06A,06A
.BYTE 0D5,0D5,0D5,0D5,0D5,0D5,0D5,0D5
.BYTE 099,099,099,099,099,099,099,099 ;Line19
.BYTE 044,044,044,044,044,044,044,044
.BYTE 0CC,0CC,0CC,0CC,0CC,0CC,0CC,0CC
.BYTE 022,022,022,022,022,022,022,022
.BYTE 011,011,011,011,011,011,011,011
.BYTE 011,011,011,011,011,011,011,011
.BYTE 0E1,0E1,0E1,0E1,0E1,0E1,0E1,0E1 ;Line4
.BYTE 0D2,0D2,0D2,0D2,0D2,0D2,0D2,0D2
.BYTE 0C3,0C3,0C3,0C3,0C3,0C3,0C3,0C3
.BYTE 0B4,0B4,0B4,0B4,0B4,0B4,0B4,0B4
.BYTE 0E2,0E2,0E2,0E2,0E2,0E2,0E2,0E2
.BYTE 000,000,000,000,000,000,000,000 ;Line12
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 092,092,092,092,092,092,092,092 ;Line20
.BYTE 043,043,043,043,043,043,043,043
.BYTE 0C2,0C2,0C2,0C2,0C2,0C2,0C2,0C2
.BYTE 02D,02D,02D,02D,02D,02D,02D,02D
.BYTE 01F,01F,01F,01F,01F,01F,01F,01F
.BYTE 000,000,000,000,000,000,000,000
SCRNDAT7 .BYTE 0E1,0E1,0E1,0E1,0E1,0E1,0E1,0E1 ;Line5
.BYTE 0D2,0D2,0D2,0D2,0D2,0D2,0D2,0D2
.BYTE 0C3,0C3,0C3,0C3,0C3,0C3,0C3,0C3
.BYTE 0B4,0B4,0B4,0B4,0B4,0B4,0B4,0B4
.BYTE 0E2,0E2,0E2,0E2,0E2,0E2,0E2,0E2
.BYTE 0EE,0EE,0EE,0EE,0EE,0EE,0EE,0EE ;Line13
.BYTE 099,099,099,099,099,099,099,099
.BYTE 0DD,0DD,0DD,0DD,0DD,0DD,0DD,0DD
.BYTE 033,033,033,033,033,033,033,033
.BYTE 011,011,011,011,011,011,011,011
.BYTE 092,092,092,092,092,092,092,092 ;Line21
.BYTE 043,043,043,043,043,043,043,043
.BYTE 0C2,0C2,0C2,0C2,0C2,0C2,0C2,0C2
.BYTE 02D,02D,02D,02D,02D,02D,02D,02D
.BYTE 01F,01F,01F,01F,01F,01F,01F,01F
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000 ;Line6
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 0E4,0E4,0E4,0E4,0E4,0E4,0E4,0E4 ;Line14
.BYTE 09A,09A,09A,09A,09A,09A,09A,09A
.BYTE 0D2,0D2,0D2,0D2,0D2,0D2,0D2,0D2
.BYTE 038,038,038,038,038,038,038,038
.BYTE 014,014,014,014,014,014,014,014
.BYTE 092,092,092,092,092,092,092,092 ;Line22
.BYTE 043,043,043,043,043,043,043,043
.BYTE 0C2,0C2,0C2,0C2,0C2,0C2,0C2,0C2
.BYTE 02D,02D,02D,02D,02D,02D,02D,02D
.BYTE 01F,01F,01F,01F,01F,01F,01F,01F
.BYTE 000,000,000,000,000,000,000,000
SCRNDAT8 .BYTE 044,044,044,044,044,044,044,044 ;Line7
.BYTE 033,033,033,033,033,033,033,033
.BYTE 077,077,077,077,077,077,077,077
.BYTE 066,066,066,066,066,066,066,066
.BYTE 0DD,0DD,0DD,0DD,0DD,0DD,0DD,0DD
.BYTE 0E4,0E4,0E4,0E4,0E4,0E4,0E4,0E4 ;Line15
.BYTE 09A,09A,09A,09A,09A,09A,09A,09A
.BYTE 0D2,0D2,0D2,0D2,0D2,0D2,0D2,0D2
.BYTE 038,038,038,038,038,038,038,038
.BYTE 014,014,014,014,014,014,014,014
.BYTE 092,092,092,092,092,092,092,092 ;Line23
.BYTE 043,043,043,043,043,043,043,043
.BYTE 0C2,0C2,0C2,0C2,0C2,0C2,0C2,0C2
.BYTE 02D,02D,02D,02D,02D,02D,02D,02D
.BYTE 01F,01F,01F,01F,01F,01F,01F,01F
.BYTE 066,077,077,077,077,077,077,077
.BYTE 040,040,040,040,040,040,040,040 ;Line8
.BYTE 03D,03D,03D,03D,03D,03D,03D,03D
.BYTE 07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 06A,06A,06A,06A,06A,06A,06A,06A
.BYTE 0D5,0D5,0D5,0D5,0D5,0D5,0D5,0D5
.BYTE 0E4,0E4,0E4,0E4,0E4,0E4,0E4,0E4 ;Line16
.BYTE 09A,09A,09A,09A,09A,09A,09A,09A
.BYTE 0D2,0D2,0D2,0D2,0D2,0D2,0D2,0D2
.BYTE 038,038,038,038,038,038,038,038
.BYTE 014,014,014,014,014,014,014,014
.BYTE 000,000,000,000,000,000,000,000 ;Line24
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000
;
; PARAMS FOR SOS GET_DEV_NUM CALL
DEVBLOCK .BYTE 02 ;2 parameters
.WORD DEVNAME ;pointer to dev name
CDEVNUM .BYTE 00
DEVNAME .BYTE 08
.ASCII ".CONSOLE"
;
;
;----------------------------------------------------------------------
;
.PROC HFRAME,1
.DEF WDEVNUM
;
; Update the character font data based on the frame number
; passed into the procedure
;
PTR .EQU 0E8
PLA ;save return address
STA RETRNADR
PLA
STA RETRNADR+1
PLA ;get frame number
ASL A ;x2
TAY
LDA FRAMETAB,Y
CLC
ADC FRAMEADR ;add lsb of base address of frame data
STA PTR
LDA FRAMETAB+1,Y
ADC FRAMEADR+1 ;add msb of base address of frame data
STA PTR+1
LDA #00 ;disable extended addressing
STA 016E9
PLA
LDY #00
LDA (PTR),Y
STA CHRINFRM ;number of characters in this frame
JSR INCPTR ;increment pointer
NEXTLOT LDA #00
STA NUMCHARS
NEXTCHAR JSR COPYDATA ;copy font data for this character
DEC CHRINFRM ;decrement count for chars in frame
BMI DONE ;branch if we are done all
INC NUMCHARS
LDA NUMCHARS
CMP #08
BCC NEXTCHAR
JSR LOADCHRS ;load eight characters
JMP NEXTLOT ;do remaining characters
DONE JSR LOADCHRS ;load characters
LDA RETRNADR+1 ;restore return address on stack
PHA
LDA RETRNADR
PHA
RTS ;and return
;
; increment pointer
;
INCPTR INC PTR
BNE MSBOK
INC PTR+1
MSBOK RTS
;
; Load character font data using .CONSOLE
;
LOADCHRS LDA NUMCHARS ;number of chars to load
STA CTRLLIST ;store in sos call param list
BRK ;char load
.BYTE 083 ;D_CONTROL SOS call
.WORD DEVBLK2
RTS
COPYDATA LDY NUMCHARS
LDX CHARTAB,Y
LDA #09 ;8 ROWS (COUNT + ONE)
STA ROW
LDY #00
NEXTROW LDA (PTR),Y
STA CTRLLIST,X
INX
JSR INCPTR ;Increment pointer
DEC ROW
BNE NEXTROW
RTS
;
; Offset into console character loading table
;
CHARTAB .BYTE 001
.BYTE 00A
.BYTE 013
.BYTE 01C
.BYTE 025
.BYTE 02E
.BYTE 037
.BYTE 040
.BYTE 049
;
; Frames
;
FRAMES .BYTE 05 ;Number of frames?
;
; Offset for each frame start
;
FRAMETAB .WORD 000B ;Offset into char data
.WORD 012C
.WORD 01EA
.WORD 02A8
.WORD 0366
;
; Frame Font data
; each frame has:
; - number of characters in the frame
; - char code + 8 rows(bytes) of data x num chars
;
; only updates the changed chars in each frame
;
; FRAME 0
.BYTE 32.
.BYTE 000,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 001,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 002,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 003,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 004,07F,07F,07F,07F,07F,07F,07F,01F
.BYTE 005,07F,07F,01F,067,017,009,000,062
.BYTE 006,07F,073,072,044,000,062,043,003
.BYTE 007,07F,07F,07F,07F,07F,07E,07B,077
.BYTE 008,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 009,07F,07F,03F,00F,047,05F,07F,07F
.BYTE 00A,07F,07F,000,005,01C,05E,05F,01F
.BYTE 00B,07F,000,01F,07F,01E,01C,018,030
.BYTE 00C,07F,000,060,07F,07F,078,002,000
.BYTE 00D,070,038,01F,07F,07F,07F,03F,01C
.BYTE 00E,011,078,078,079,07D,07D,07C,07E
.BYTE 00F,073,07C,07F,07F,07F,07F,07F,07F
.BYTE 010,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 011,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 012,03F,003,003,073,073,033,073,078
.BYTE 013,011,042,060,071,070,078,078,071
.BYTE 014,010,021,00F,07F,07F,07F,07F,07F
.BYTE 015,000,000,060,003,003,067,067,067
.BYTE 016,07C,070,071,078,07C,07F,07F,07F
.BYTE 017,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 018,07F,07F,07F,07F,000,07F,07F,07F
.BYTE 019,07F,07F,07F,07F,000,07F,07F,07F
.BYTE 01A,07C,07F,07F,07F,000,07F,07F,07F
.BYTE 01B,063,047,01F,01F,000,07F,07F,07F
.BYTE 01C,07F,07F,07F,07E,000,07F,07F,07F
.BYTE 01D,047,007,03F,03F,000,07F,07F,07F
.BYTE 01E,07F,07F,07E,07C,000,07F,07F,07F
.BYTE 01F,07F,07F,07F,07F,000,07F,07F,07F
; FRAME 1
.BYTE 21.
.BYTE 004,07F,07F,07F,07F,07F,03F,05F,007
.BYTE 005,07F,07F,04F,02B,01D,004,042,020
.BYTE 006,07B,073,070,068,058,070,000,044
.BYTE 007,07F,07F,07F,07F,07F,07E,079,079
.BYTE 009,07F,03F,01F,00F,047,07F,07F,07F
.BYTE 00A,03F,000,068,02C,00E,00F,01F,01F
.BYTE 00B,000,06F,06F,024,000,000,000,000
.BYTE 00C,078,07F,07F,07E,038,000,010,000
.BYTE 00D,027,03F,07F,07D,07C,03C,00E,07E
.BYTE 00E,01C,07E,07E,07E,07E,07E,07E,078
.BYTE 00F,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 012,01F,007,007,047,011,019,039,009
.BYTE 013,038,07E,07F,07F,07F,07F,07E,07F
.BYTE 014,000,03F,01F,01F,00F,04F,067,067
.BYTE 015,000,068,07C,03F,03F,07F,07F,07F
.BYTE 016,070,073,079,07C,07E,07F,07F,07F
.BYTE 01A,049,079,073,063,000,07F,07F,07F
.BYTE 01B,07F,07F,07F,07F,000,07F,07F,07F
.BYTE 01C,073,073,067,047,000,07F,07F,07F
.BYTE 01D,07F,07F,07F,07F,000,07F,07F,07F
.BYTE 01E,07F,07F,07F,07F,000,07F,07F,07F
; FRAME 2
.BYTE 21.
.BYTE 004,07F,07F,07F,07F,07F,07F,01F,03F
.BYTE 005,07F,07F,07F,03F,007,04F,010,001
.BYTE 006,07F,07B,073,068,041,020,060,041
.BYTE 007,07F,07F,07F,07F,07F,07F,07E,07B
.BYTE 009,07F,07F,03F,00F,003,02F,07F,07F
.BYTE 00A,07F,07F,000,058,01E,00F,00F,00F
.BYTE 00B,07F,000,01F,04F,007,00C,000,008
.BYTE 00C,007,070,07F,07F,01E,00F,000,000
.BYTE 00D,040,007,03F,07F,03E,038,030,018
.BYTE 00E,018,03C,07D,07E,07E,07F,07F,07E
.BYTE 00F,079,07E,07F,07F,07F,07F,07F,07F
.BYTE 011,07F,07F,07F,07F,07F,03F,01F,04F
.BYTE 012,00F,007,043,061,078,07E,07F,07F
.BYTE 013,060,061,071,078,07C,079,067,04F
.BYTE 014,007,07F,07F,07F,07F,03F,00F,061
.BYTE 015,078,001,071,078,07C,07E,07F,07F
.BYTE 016,061,040,04F,04F,04F,04F,067,067
.BYTE 019,067,067,063,067,000,07F,07F,07F
.BYTE 01A,07F,07F,07F,07F,000,07F,07F,07F
.BYTE 01B,00F,07F,07F,07F,000,07F,07F,07F
.BYTE 01C,07C,07F,07F,07F,000,07F,07F,07F
; FRAME 3
.BYTE 21.
.BYTE 004,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 005,07F,07F,07F,07F,07F,01F,047,017
.BYTE 006,07F,07F,073,067,070,04B,070,060
.BYTE 009,07F,07F,07F,03F,05F,07F,07F,07F
.BYTE 00A,07F,07F,000,030,03A,03F,03F,03F
.BYTE 00B,07F,001,00C,03E,042,018,04C,032
.BYTE 00C,07F,03C,040,07F,070,060,040,000
.BYTE 00D,002,004,01F,07F,079,071,058,018
.BYTE 00E,000,010,074,070,079,07B,07B,078
.BYTE 00F,070,073,07E,07F,07F,07F,07F,07F
.BYTE 011,07F,07F,07F,07F,07F,07F,03F,011
.BYTE 012,03F,01F,007,041,071,07C,07E,07F
.BYTE 013,008,000,00C,01F,01F,00F,01F,07F
.BYTE 014,000,01F,07F,07F,07F,00F,01E,07C
.BYTE 015,040,000,007,047,04F,04F,040,07F
.BYTE 016,07B,066,040,003,01F,03F,07F,07F
.BYTE 017,07F,07F,07F,07F,07F,07E,07C,079
.BYTE 019,043,07F,07F,07F,000,07F,07F,07F
.BYTE 01B,07F,07F,07F,07F,000,07F,07F,07F
.BYTE 01C,073,067,067,07F,000,07F,07F,07F
.BYTE 01F,079,07F,07F,07F,000,07F,07F,07F
; FRAME 4
.BYTE 25.
.BYTE 005,07F,07F,01F,067,017,009,000,062
.BYTE 006,07F,073,072,044,000,062,043,003
.BYTE 007,07F,07F,07F,07F,07F,07E,07B,077
.BYTE 009,07F,07F,03F,00F,047,05F,07F,07F
.BYTE 00A,07F,07F,000,005,01C,05E,05F,01F
.BYTE 00B,07F,000,01F,07F,01E,01C,018,030
.BYTE 00C,07F,000,060,07F,07F,078,002,000
.BYTE 00D,070,038,01F,07F,07F,07F,03F,01C
.BYTE 00E,011,078,078,079,07D,07D,07C,07E
.BYTE 00F,073,07C,07F,07F,07F,07F,07F,07F
.BYTE 011,07F,07F,07F,07F,07F,07F,07E,07B
.BYTE 012,03F,003,003,073,073,033,073,078
.BYTE 013,011,042,060,071,070,078,078,071
.BYTE 014,010,021,00F,07F,07F,07F,07F,07F
.BYTE 015,000,000,060,003,003,067,067,067
.BYTE 016,07C,070,071,078,07C,07F,07F,07F
.BYTE 017,07F,07F,07F,07F,07F,07F,07F,07F
.BYTE 018,07F,07F,07F,07F,000,07F,07F,07F
.BYTE 019,07F,07F,07F,07F,000,07F,07F,07F
.BYTE 01A,07C,07F,07F,07F,000,07F,07F,07F
.BYTE 01B,063,047,01F,01F,000,07F,07F,07F
.BYTE 01C,07F,07F,07F,07E,000,07F,07F,07F
.BYTE 01D,047,007,03F,03F,000,07F,07F,07F
.BYTE 01E,07F,07F,07E,07C,000,07F,07F,07F
.BYTE 01F,07F,07F,07F,07F,000,07F,07F,07F
;
FRAMEADR .WORD FRAMES ;Address for start of frame data
ROW .BYTE 00 ;current text screen row
NUMCHARS .BYTE 00 ;number of characters to load
CHRINFRM .BYTE 00 ;number of characters in frame
RETRNADR .WORD 0000 ;return address
;
; sos dev control call params
;
DEVBLK2 .BYTE 03 ;3 params
WDEVNUM .BYTE 00 ;devnum
.BYTE 11 ;partial char load
.WORD CTRLLIST ;pointer to control list
;
;
;
CTRLLIST .BYTE 000 ;number of characters to load
.BYTE 000,000,000,000,000,000,000,000,000 ;chr code + 8 rows
.BYTE 000,000,000,000,000,000,000,000,000 ; of data
.BYTE 000,000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000,000
.BYTE 000,000,000,000,000,000,000,000,000
;
;
;----------------------------------------------------------------------
;
.PROC HSCROLL
;
; scroll text screen right one character
; with wrap around
;
LINECNT .EQU 0EA
LINEPTR .EQU 0EC
LDA #00
STA LINECNT ;number of lines
NXTLINE LDA LINECNT
JSR CALCADR ;setup up line pointer
LDY #39. ;number of characters
LDA (LINEPTR),Y ;current char in column 39
PHA ;and save
NXTCHAR DEY ;get character to the left one pos
LDA (LINEPTR),Y
INY ;and move one char to the right
STA (LINEPTR),Y
DEY
BNE NXTCHAR ;repeat until we are at column 0
PLA ;then get the saved char
STA (LINEPTR),Y ;and store in column 0
INC LINECNT ;inc line counter
LDA LINECNT
CMP #24. ;24 Lines
BCC NXTLINE
RTS
;
; calculate line pointer
; - input A = current line
; - output EC/ED = address of start of line
;
CALCADR PHA ;save line number
LSR A ;calculate line address high byte
AND #03
ORA #04
STA LINEPTR+1
PLA ;restore line number
AND #018 ;calculate line address low byte
BCC ALTERN
ADC #07F
ALTERN STA LINEPTR
ASL A
ASL A
ORA LINEPTR
STA LINEPTR
RTS
.END