Login

Subversion Repositories NedoOS

Rev

Rev 129 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Test source for EMPTYTAP / SAVETAP ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

                device  zxspectrum48

; BASIC block
        module bas
line10:         db      0, 10
                dw      .len
.cmds           ; BORDER NOT PI:
                db      #E7, #C3, #A7, ':'
                ; PAPER NOT PI:
                db      #DA, #C3, #A7, ':'
                ; INK VAL "7":
                db      #D9, #B0, '"7":'
                ; CLEAR VAL "32763" : REM demo-1 address
                db      #FD, #B0, '"32763"', #0D
.len = $ - .cmds

line20:         db      0, 20
                dw      .len
.cmds           ; POKE VAL "23739",CODE "o":
                db      #F4, #B0, '"23739",', #AF, '"o":'
                ; LOAD ""SCREEN#: LOAD ""CODE
                db      #EF, '""', #AA, ':', #EF, '""', #AF, #0D
.len = $ - .cmds

line30:         db      0, 30
                dw      .len
.cmds           ; RANDOMIZE USR VAL "32764" : REM demo address
                db      #F9, #C0, #B0, '"32764"', #0D
.len = $ - .cmds

total = $ - line10
        endmodule


; NUMS block
nums            db      1
                dw      .datalen
.data           db      #82,#49,#0F,#DA,#A2     ;; Value 3.1415927
.datalen = $ - .data
.savelen = $ - nums

; CHARS block
chars           db      1
                dw      .datalen
.data           db      "SAVETAP testing character array"
.datalen = $ - .data
.savelen = $ - chars


; SCREEN$ block
                org     #4000
screen:
        dup 12
                block   256,#AA
                block   256,#55
        edup
        dup 24
                db      #07, #06, #06, #16, #05, #05, #0D, #04, #04, #14, #03, #03, #11, #02, #02, #29
                db      #29, #02, #02, #11, #03, #03, #14, #04, #04, #0D, #05, #05, #16, #06, #06, #07
        edup
.len = $ - screen


; CODE block
                org     #7FFC     ; to cross the slot-boundary

demo:           ei
                halt
                djnz    demo
.loop           ei
                halt
                ld      hl,#5801
                ld      de,#5800
                ld      bc,#300
                ld      a,(de)
                ld      (#5B00),a
                ldir
                call    .rnd
                ld      c,a
                and     #0C
                sub     #0B
                jr      nc,.not12
                ld      a,2
.not12          ld      d,a
                call    .rnd
                ld      e,a
                ld      hl,#5800
                add     hl,de
                ld      a,c
                and     #7F
                xor     (hl)
                ld      (hl),a
                jr      .loop

.rnd            ld      a,#29
                ld      b,a
                rrca
                rrca
                rrca
                xor     #1F
                add     a,b
                sbc     a,#FF
                ld      (.rnd+1),a
                ret
.len = $ - demo
        db      "XXXX"

; Clear output tap file
                emptytap "savetap_test.tap"
; Store BASIC
                savetap "savetap_test.tap",BASIC,"tstSAVETAP", bas.line10, bas.total, 10
; Store SCREEN#
                savetap "savetap_test.tap",CODE,"intro", screen, screen.len
; Store CODE
                savetap "savetap_test.tap",CODE,"demo", demo, demo.len
; Store NUMBERS
                savetap "savetap_test.tap",NUMBERS,"n", nums, nums.savelen, 'n'
; Store CHARS
                savetap "savetap_test.tap",CHARS,"t$", chars, chars.savelen, 't'
; Store HEADLESS
                savetap "savetap_test.tap",HEADLESS, (screen + #1800), 32, 66 ; custom flag


; No autostart (#8000 is used)
                savetap "savetap_test.tap",BASIC,"No start", bas.line10, bas.total
; Default letter ('A' is used)
                savetap "savetap_test.tap",NUMBERS,"n", nums, nums.savelen
; Address + length > #10000 (block to the end of memory will be saved)
                savetap "savetap_test.tap",HEADLESS, #FFFF, 2

; Extra variants of valid commands to exercise all code paths
                savetap "savetap_test.tap",CODE,"_extra1", demo, 1, 0x8000, 0x1234


;;;;;;;;;;;;;;;;;
;; Error cases ;;
;;;;;;;;;;;;;;;;;

                emptytap ""                             ;; Syntax error
                savetap ""                              ;; Syntax error. No parameters
                savetap "error"                         ;; Syntax error. No parameters
                savetap "error",-1                      ;; Negative values are not allowed

                savetap "error",HEADLESS,               ;; Syntax error
                savetap "error",HEADLESS,,              ;; Missing start address
                savetap "error",HEADLESS,-1             ;; Negative values are not allowed
                savetap "error",HEADLESS,0,-1           ;; Negative values are not allowed
                savetap "error",HEADLESS,#10000         ;; Values higher than FFFFh are not allowed
                savetap "error",HEADLESS,0,#10000       ;; Values higher than FFFFh are not allowed
                savetap "error",HEADLESS,0,             ;; Syntax error
                savetap "error",HEADLESS,0,0,           ;; Syntax error
                savetap "error",HEADLESS,0,0,-1         ;; Invalid flag byte
                savetap "error",HEADLESS,0,0,0x100      ;; Invalid flag byte

                savetap "error",CODE,                   ;; Syntax error
                savetap "error",CODE,,                  ;; Missing tape block file name
                savetap "error",CODE,"Err",             ;; Missing start address
                savetap "error",CODE,"Err",0,           ;; Missing block length
                savetap "error",CODE,"Err",-1           ;; Negative values are not allowed
                savetap "error",CODE,"Err",0,-1         ;; Negative values are not allowed
                savetap "error",CODE,"Err",0,0,-1       ;; Negative values are not allowed
                savetap "error",CODE,"Err",0,0,0,-1     ;; Negative values are not allowed
                savetap "error",CODE,"Err",#10000       ;; Values higher than FFFFh are not allowed
                savetap "error",CODE,"Err",0,#10000     ;; Values higher than FFFFh are not allowed
                savetap "error",CODE,"Err",0,0,#10000   ;; Values higher than FFFFh are not allowed
                savetap "error",CODE,"Err",0,0,0,#10000 ;; Values higher than FFFFh are not allowed
                savetap "error",CODE,"Err",0,0,0,       ;; Syntax error
                savetap "error",CODE,"Err",0,0,         ;; Syntax error

                savetap "error",BASIC,"Err",0,0,#4000   ;; Autostart LINE out of range
                savetap "error",NUMBERS,"Err",0,0,'@'   ;; Variable name out of range
                savetap "error",NUMBERS,"Err",0,0,'?'   ;; Variable name out of range

                savetap "error",HEADLESS        ;; Will try to use HEADLESS as label for start of tap-snapshot
                savetap "error",HEADLESS+!      ;; causing to fail in other part of implementation
                savetap "error",,               ;; syntax error, no type parameter

                device zxspectrumnext
                savetap "error",0x1234          ;; SAVETAP snapshot is "ZX Spectrum devices" only