;
;               **************************************
;               **                                  **
;               **        Welcome to PHOENIX        **
;               **                                  **
;               **  ~FIREBIRD~ buster to the world  **
;               **                                  **
;               **  (C)Copyright December 1988 HLF  **
;               **                                  **
;               **     Version 1.4 source code.     **
;               **                                  **
;               **************************************
;
;
                org &3000
                limit &ffff

.km_wait_key    defl &bb18
.txt_output     defl &bb5a
.txt_win_enable defl &bb66
.txt_clear_win  defl &bb6c
.txt_place_csr  defl &bb8a
.txt_erase_csr  defl &bb8d
.txt_set_pen    defl &bb90
.txt_set_paper  defl &bb96
.txt_str_select defl &bbb4
.scr_set_mode   defl &bc0e
.scr_set_ink    defl &bc32
.scr_set_bord   defl &bc38
.scr_set_flash  defl &bc3e
.disc_out_open  defl &bc8c
.disc_out_close defl &bc8f
.disc_out_dir   defl &bc98
.kl_init_back   defl &bcce
.mc_flyback     defl &bd19

.phoenix        ld a,1
                call scr_set_mode
                xor a
                ld (flag),a
                ld bc,0
                call scr_set_ink
                ld a,1
                ld bc,&1818
                call scr_set_ink
                ld a,2
                ld bc,&c0c
                call scr_set_ink
                ld a,3
                ld bc,&1a
                call scr_set_ink
                ld bc,0
                call scr_set_bord
                ld hl,&f0f
                call scr_set_flash

.window1        ld a,1
                call txt_str_select
                ld hl,&e06
                ld de,&1a06
                call txt_win_enable
                xor a
                call txt_set_paper

.window2        ld a,2
                call txt_str_select
                ld hl,&e06
                ld de,&1a06
                call txt_win_enable
                xor a
                call txt_set_paper

.window0        ld a,0
                call txt_str_select
                ld a,2
                call txt_set_paper

.start          ld hl,copyright
                call print
                xor a
                call txt_set_paper
                ld hl,&2
                ld de,&2717
                call txt_win_enable
                ld hl,loading
                call print
                call txt_place_csr
                call km_wait_key
                call txt_erase_csr

                call &3f4c
                di
                ld hl,(&39)
                ld (patch1+1),hl
                ld hl,check
                ld (&39),hl
                ei
                jp &3e00

.check          push af
                push bc
                push de
                push hl
                push ix
                ld b,&f6
                in a,(c)
                or a
                jr z,patch

.skip           pop ix
                pop hl
                pop de
                pop bc
                pop af

.patch1         jp 0

.patch          di
                ld hl,(patch1+1)
                ld (&39),hl
                ei
                xor a
                call txt_str_select
                ld hl,searching
                call print
                ld ix,&100
                ld bc,&100

.search         ld a,(ix)
                cp &c3
                jr nz,search1
                ld l,(ix+1)
                ld h,(ix+2)
                ld (execute1+1),hl
                ld (execute2+1),hl
                ld (ix+1),0
                ld (ix+2),&be
                push hl
                ld hl,exec
                call print
                pop hl
                call printhl
                ld a,1
                ld (flag),a
                ld a,13
                call txt_output
                ld a,10
                call txt_output

.search1        inc ix
                dec bc
                ld a,b
                or c
                jr nz,search

                ld a,13
                call txt_output
                ld a,10
                call txt_output
                ld hl,over
                call print
                ld a,(flag)
                or a
                jr nz,found
                ld hl,nofound
                call print
                call km_wait_key
                rst 0

.found          ld hl,pressakey
                call print
                call km_wait_key
                call txt_clear_win
                ld hl,instruct1
                call print
                call txt_place_csr
                call km_wait_key
                call txt_erase_csr
                ld hl,instruct2
                call print

                ld b,250
.pause1         call mc_flyback
                djnz pause1

                ld b,250
.pause2         call mc_flyback
                djnz pause2

                ld hl,saver
                ld de,&be00
                ld bc,saver1-saver
                ldir
                jp skip

.print          ld a,(hl)
                push hl
                call txt_set_pen
                pop hl
                inc hl

.ploop          ld a,(hl)
                or a
                ret z
                call txt_output
                inc hl
                jr ploop

.printhl        ld a,h
                call hex
                ld a,l
                call hex
                ret

.hex            push af
                rra
                rra
                rra
                rra
                call hprint
                pop af

.hprint         and %1111
                add "0"
                cp ":"
                jr c,hskip
                add 7
.hskip          call txt_output
                ret

.saver          ld c,7
                ld hl,&a900
                ld de,&40
                call kl_init_back

                ld b,9
                ld hl,&be2a
                ld de,&c000
                call disc_out_open
                ld hl,&40
                ld de,&a460
.execute1       ld bc,0
                ld a,2
                call disc_out_dir
                call disc_out_close

.execute2       jp 0
 
.fname1         text "PFILE.BIN"

.saver1

.copyright      defb 1
                text "   ~PHOENIX~ - FIREBIRD LOADER BUSTER   "
                text "     (C)Copyright December 1988 HLF     "
                defb 31,1,25
                rmem 40,32
                defb 31,1,5,0

.loading        defb 1,13,10,10
                text "Insert tape , press PLAY and any key : "
                defb 0

.exec           defb 3
                text "Execution address = &"
                defb 0

.over           defb 1
                text "Search complete."
                defb 13,10,10,0

.nofound        defb 3
                text "*** No jumps found.Press a key ***"
                defb 0

.searching      defb 1,31,1,9
                text "Searching ..."
                defb 13,10,10,0

.pressakey      defb 2
                text "Press a key..."
                defb 0

.instruct1      defb 1,31,1,3
                text "Insert blank disk and press a key : "
                defb 0

.instruct2      defb 1,31,1,5
                text "The game will now load and a disk backup"
                text "called ~PFILE.BIN~ will be made.This can"
                text "be hacked easily.Have a nice day !"
                defb 0

.flag           defb 0 
