;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Test source for TAPOUT / TAPEND / OUTPUT / OUTEND ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DEFINE tape_file "tapout_test.tap"
DEFINE pure_code "tapout_test.bin"
db 1,1,1,1
EMPTYTAP tape_file ;; Create empty TAP file
db 2,2,2,2
TAPOUT tape_file,0 ;; Basic header
db 0x00 ;; Header type = basic
db 'HelloWorld' ;; File name
dw baslen ;; Total length
dw 1 ;; Start line
dw baslen ;; Length of pure basic
TAPEND ;; End of tape block
db 3,3,3,3
TAPOUT tape_file ;; Basic body
CODE = 0xAF
USR = 0xC0
LOAD = 0xEF
RANDOMIZE = 0xF9
basic db 0,1 ;; Line 1
dw l1len ;; Length of line 1
line1 db LOAD,'""',CODE ;; LOAD "" CODE
db 0x0D ;; End of line 1
l1len = $-line1
db 0,2 ;; Line 2
dw l2len ;; Length of line 2
line2 db RANDOMIZE,USR ;; RANDOMIZE USR
LUA ALLPASS ;; Digits of number
_pc('db "' .. tostring(_c("start")) .. '"')
ENDLUA
db 0x0E ;; Number follows
db 0x00,0x00 ;; 5 bytes of internal
dw start ;; number representation
db 0x00
db 0x0D ;; End of line 2
l2len = $-line2
baslen = $-basic
TAPEND ;; End of tape block
db 4,4,4,4
TAPOUT tape_file,0 ;; Bytes header
db 0x03 ;; Header type = bytes
db 'HelloWorld' ;; File name
dw codlen ;; Total length
dw start ;; Start address
dw 0x8000
TAPEND ;; End of tape block
db 5,5,5,5
TAPOUT tape_file ;; Bytes body
OUTPUT pure_code ;; Pure data file
org 0x8000 ;; Start address of code
start ld a,0x02 ;; Channel 2
call 0x1601 ;; is opened
ld de,text ;; Address of text
ld bc,txtlen ;; Length of text
jp 0x203C ;; Jump to print text
text db 13 ;; Cursor to next line
db 19,1 ;; BRIGHT 1
db 18,1 ;; FLASH 1
db 'Hello world !' ;; Text
txtlen = $-text
codlen = $-start
OUTEND ;; End of pure data file
TAPEND ;; End of tape block
db 6,6,6,6
;; Error cases
SAVETAP "nothing",start ;; No DEVICE defined
TAPOUT tape_file, ;; No flagbyte
TAPOUT ;; No parameters
;; End of test file