home *** CD-ROM | disk | FTP | other *** search
- ;
- ;
- ; EXPANSION RAM
- ;
- * = $B000
- ;
- ;
- ;
- JMP START
- WSET LDY #$04
- PARL LDA WSZ,X ;SET WINDOW BORDERS
- STA $00E3,Y ;PAGE 1 PARAMETERS
- DEX
- DEY
- BNE PARL
- JSR $C142 ;CLR HOME
- ;
- LDX #$00 ;PRINT WINDOW
- JSR PRT
- STX $FC
- ROWS LDX $FC
- JSR PRT
- LDA $EB
- CMP $E4
- BNE ROWS ;HEIGHT LOOP
- JSR PRT
- DEC $E4 ;SET INSIDE WINDOW
- INC $E5
- INC $E6
- DEC $E7
- JSR $CA32 ;CLR LINE OVERFLOW
- JSR $C150 ;CURSOR HOME
- RTS ;EXIT
- PRT JSR SIDE
- NEXT LDA CHR,X ;GET CHAR BYTES
- JSR $C72D
- LDA $EC
- CMP $E7
- BNE NEXT
- SNXT INX
- SIDE LDA CHR,X ;WIDTH LOOP
- BEQ CONT
- JSR $C72D
- JMP SNXT
- CONT INX
- RTS
- ;
- ;
- WSZC .BYT 0
- WSZ .BYT 0,13,2,3,17
- .BYT 15,2,3,22
- .BYT 17,2,3,22
- ;
- CHR .BYT 159,207,0,183,18,32,0
- .BYT 146,180,0,32,18,32,0
- .BYT 175,0,175,175,175,0
- ;
- ;
- SWAP JSR $CA24 ;SCREEN = WINDOW
- JSR $C150 ;CRSR HOME
- LDA WSZ
- STA $F1 ;RESOTRE CRSR COLOR
- LDA $EE ;MAX COLUMNS
- CMP #$4F ;79 COL
- BEQ S80 ;YES, GO 80 COL
- ;
- LDA #$04 ;SCREEN START
- STA $FB ;SET UP IND ADDR
- STA $FD
- LDA #$00
- STA $FA
- STA $FC
- LDA #$FA
- STA $02B9 ;Z-PAGE POINTER
- JSR SET
- LDA #$D8 ;COLOR RAM
- STA $FD
- SET LDY #$00
- STY $FF
- RDWT LDA SF ;STASH/FETCH?
- BNE FETCH
- LDX #$01 ;TO BANK 1
- LDA ($FC),Y ;FROM SCREEN
- JSR $FF77 ;STASH
- JMP LOOP
- ;
- FETCH LDA #$FA
- LDX #$01 ;FROM BANK 1
- JSR $FF74 ;FETCH
- STA ($FC),Y ;TO SCREEN
- ;
- LOOP INY
- BNE RDWT
- INC $FB ;INC HI BYTES
- INC $FD
- INC $FF
- LDA $FF
- CMP #$04 ;DONE?
- BNE RDWT
- RTS ;GET COLOR OR EXIT
- ;
- SF .BYT 01
- ;
- ;
- S80 LDA #$10 ;16 PAGES
- STA $FF
- LDX #$12 ;R18 DEST HI BYTE
- LDA RW
- JSR WRITE
- INX ;R19 DEST LO BYTE
- LDA #$00
- JSR WRITE
- LDA #$A0
- LDX #$18 ;R24 SET COPY BIT
- JSR WRITE
- LDA #$00
- LDX #$21 ;R33 SOURCE LO BYTE
- JSR WRITE
- LDY RW+1
- LP2 TYA
- LDX #$20 ;R32 SOURCE HI BYTE
- JSR WRITE
- LDA #$00
- LDX #$1E ;WORD COUNT
- JSR WRITE
- INY
- DEC $FF
- BNE LP2
- RTS ;EXIT
- ;
- WRITE STX $D600 ;WRITE TO VDC
- WAIT BIT $D600
- BPL WAIT
- STA $D601
- RTS
- ;
- RW .BYT 16,0
- ;
- ;
- ; --- MENU SCREENS ---
- ; --- MAIN ---
- ;
- ;
- START LDA $F1 ;SAVE SCREEN
- STA WSZ ; CURSOR COLOR
- LDA $D021
- STA WSZC ; SCREEN COLOR
- LDA #$FB
- STA $D021 ; GREY SCREEN
- LDA #$00
- STA SF ;REINITIALIZE SWAP
- STA RW+1 ; FOR READ
- LDA #$10 ; 40 COL AND
- STA RW ; 80 COL
- MAIN JSR SWAP
- LDA #$01
- STA SF ;RESTE R/W FOR
- LDA #$00 ;40 AND 80 COL SCRN
- STA RW
- LDA #$10
- STA RW+1
- JSR $CAE5 ;SCROLLING OFF
- LDA #$9F ;CYAN
- STA CHR ;BORDER COLOR
- LDX #$04
- JSR WSET ;DO WINDOW
- LDX #$01
- PRCH STX SEL
- LDA LO-1,X ;SET ADDR FOR JMP
- STA $FE
- LDA HI-1,X
- STA $FF
- JSR $FA17
- .BYT 19,146,' M E N U',13
- .BYT '╖╖╖╖╖╖╖╖╖╖╖╖',13,13,32,0
- CPX #$01
- BNE CH1
- JSR $C8C2 ;RVS ON
- CH1 JSR $FA17
- .BYT 'DISK > EXP',13,13,32,0
- CPX #$02
- BNE CH2
- JSR $C8C2
- CH2 JSR $FA17
- .BYT 'EXP > HOST',13,13,32,0
- CPX #$03
- BNE CH3
- JSR $C8C2
- CH3 JSR $FA17
- .BYT 'HOST > EXP',13,0
- ;
- KEY JSR $FFE4
- CMP #$1B ;ESC CHAR
- BNE CRDN
- JSR $CAE2 ;ENABLE SCROLLING
- LDA KMSG
- STA $9D ;RESTORE KERNAL MSG
- LDA WSZC
- STA $D021 ;RESTORE SCRN COLOR
- JMP SWAP ;FETCH AND EXIT
- CRDN CMP #$11 ;CRSR DOWN?
- BNE CSRUP
- INC SEL
- LDX SEL
- CPX #$04 ;>#3?
- BNE PS1
- LDX #$01
- PS1 JMP PRCH
- CSRUP CMP #$91 ;CRSR UP?
- BNE RETRN
- DEC SEL
- LDX SEL
- BNE PS2 ; =0 ?
- LDX #$03
- PS2 JMP PRCH
- RETRN CMP #$0D ;<RETURN> KEY?
- BNE KEY
- JMP ($FE)
- ;
- SEL .BYT 0
- LO .BYT 0,0,0 ;VECTOR IND JUMP
- HI .BYT 0,0,0 ;TABLE
- ;
- ;
- ; --- HOST => EXP ---
- ;
- ;
- HOST LDA #$9E ;YELLOW
- STA CHR ;BORDER COLOR
- LDX #$08 ;BORDER TABLE
- JSR WSET ;DO NEW WINDOW
- ;
- HST1 JSR $FA17
- .BYT 19,146,' HOST -> EXP RAM'
- .BYT 13,'╖╖╖╖╖╖╖╖╖╖╖╖╖╖╖╖╖'
- .BYT 13,32,32
- BSC .BYT 18,'BASIC',146,32,32
- BIN .BYT 146,'BINARY',13,0
- ;
- HKEY JSR $FFE4
- CMP #$1B ;ESCAPE?
- BNE C1
- JMP MAIN
- C1 CMP #$1D ;CRSR RIGHT?
- BEQ C2
- CMP #$9D ;CRSR LEFT?
- BNE R1
- C2 LDA #$80
- EOR BSC ;RVS ON <> RVS OFF
- STA BSC
- LDA #$80
- EOR BIN
- STA BIN
- JMP HST1 ;PRINT NEW MENU
- R1 CMP #$0D ;<RET> KEY?
- BNE HKEY
- ;
- JSR XFLAD
- JSR XFLNM
- JMP MAIN
- XFLNM JSR $FA17
- .BYT 13,' FILENAME:',13,0
- FLNM JSR $FFCF
- INY
- CMP #$0D ;<RET> KEY?
- BEQ PAD ;W/ #$A0
- STA ($FE),Y
- JMP FLNM
- PAD LDA #$A0
- PD1 CPY #$11 ;16 CHAR IN NAME?
- BEQ BSRAM ;YES, CONT.
- STA ($FE),Y
- INY
- JMP PD1
- BSRAM LDA BSC
- CMP #$12 ;RVS=BASIC PRG
- BNE BNINP
- LDA $2D ;START OF BASIC
- STA ($FE),Y
- INY
- LDA $2E
- STA ($FE),Y
- JSR XRBEG ;EX RAM ADDR
- INY
- SEC
- LDA $1210 ;END OF BASIC TEXT
- SBC $2D ;CALC # OF BYTES
- STA ($FE),Y
- INY
- LDA $1211
- SBC $2E
- STA ($FE),Y
- GODMA INY ;C128 BANK
- LDA #$00
- STA ($FE),Y
- JMP DPREP
- BNINP JSR $FA17
- .BYT 13,13,'BANK (0/1): ',0
- JSR $FFCF
- STA FN+2
- STADR JSR $FA17
- .BYT 19,17,17,17,17,17,17,17,17
- .BYT 17,'START ADDR: $',0
- JSR HXINP
- BCS STADR
- STA $0AB4 ;TEMP STORAGE
- JSR CNVHX
- BCS STADR
- STA $0AB5 ;TEMP STORAGE
- STA ($FE),Y
- INY
- LDA $0AB4
- STA ($FE),Y
- JSR XRBEG
- ENDAD JSR $FA17
- .BYT 19,17,17,17,17,17,17,17,17
- .BYT 17,17,' END ADDR: $',0
- JSR HXINP
- BCS ENDAD
- STA $0AB6
- JSR CNVHX
- BCS ENDAD
- INY
- SEC
- SBC $0AB5 ;CALC FILE SIZE
- STA ($FE),Y
- INY
- LDA $0AB6
- SBC $0AB4
- STA ($FE),Y
- INY
- LDA FN+2 ;BANK #
- SEC
- SBC #$30
- STA ($FE),Y
- ;
- DPREP INC TOTFL
- CLC
- LDA FN
- ADC #$19 ;+25 FOR NEXT FLNAME
- STA FN
- BCC DP1
- INC FN+1
- DP1 LDY #$16
- CLC
- LDA ($FE),Y ;UPDDATE RAM ADDR
- ADC RAMAD
- STA RAMAD
- INY
- LDA ($FE),Y
- ADC RAMAD+1
- STA RAMAD+1
- BCC DP2
- INC RAMAD+2
- DP2 JMP DMA
- ;
- HXINP LDX #$00
- INLP JSR $FFCF ;INPUT HEX CHARS
- STA $0200,X
- INX
- CMP #$0D
- BNE INLP
- LDX #$FF
- CNVHX JSR HXCV ;CONVERT HEX CHARS
- BCS HXRTN ;TO LO HI BYTE
- ASL A
- ASL A
- ASL A
- ASL A
- STA $FA,X
- JSR HXCV
- BCS HXRTN
- DEX
- CLC
- ADC $FA,X
- INX
- HXRTN RTS
- ;
- HXCV INX
- LDA $0200,X
- SEC
- SBC #$30 ;ASCII TO INT
- BCC SCRT
- CMP #$0A
- BCC ASCRT
- SBC #$07
- CMP #$10
- BCC ASCRT
- SCRT SEC ;NOT $0-$F RTS
- ASCRT RTS
- ;
- XFLAD LDA #$80 ;STASH CMD
- STA DCMD+1
- LDA FN
- STA $FE
- LDA FN+1
- STA $FF
- LDA #$00
- TAY
- STA ($FE),Y
- RTS
- ;
- XRBEG INY
- LDA RAMAD
- STA ($FE),Y
- INY
- LDA RAMAD+1
- STA ($FE),Y
- INY
- LDA RAMAD+2
- STA ($FE),Y
- RTS
- ;
- ;
- FN .BYT 0,189,0 ;CAT IND ADDR, BANK
- ;
- RAMAD .BYT 0,0,0 ;NEXT AVAIL ADDR
- ;
- ;
- ;
- ; ---- EXP DIRECTORY ----
- ; -- FETCH --
- ;
- ;
- DIR LDA #$99 ;LT. GREEN
- STA CHR
- LDX #$0C ;BORDER TABLE
- JSR WSET
- JSR $FA17
- .BYT 19,146,'EXP RAM DIRECTORY'
- .BYT 13,'╖╖╖╖╖╖╖╖╖╖╖╖╖╖╖╖╖',0
- LDA TOTFL
- CMP #$01
- BNE EXMUS
- JSR $FA17
- .BYT 13,13,' EXP RAM EMPTY'
- .BYT 13,13,' PRESS ANY KEY',0
- EXWT JSR $FFE4
- BEQ EXWT
- JMP MAIN
- EXMUS LDA #$01
- STA SELECT
- STA TOP
- LDA #$0B
- STA TOP+1
- EXMNU JSR $FA17
- .BYT 19,17,17,17,0
- LDA #$01
- STA $FE ;SET IND ADDR
- LDA #$BD
- STA $FF
- LDX #$01
- EXMU1 CPX TOP
- BEQ EXM1
- JSR ADD
- INX
- JMP EXMU1
- ;
- EXM1 CPX SELECT
- BNE EXM2
- LDA #$80 ;RVS ON
- STA $F3
- EXM2 LDY #$00
- EXM3 LDA ($FE),Y
- JSR $FFD2
- INY
- CPY #$10 ;ALL 16 CHARS?
- BNE EXM3
- JSR ADD
- EXM4 INX
- LDA #$0D
- JSR $FFD2
- CPX TOTFL ;LAST FILE?
- BEQ EXKEY
- CPX TOP+1
- BNE EXM1
- ;
- EXKEY JSR $FFE4
- CMP #$1B ;ESCAPE KEY?
- BNE EXCUP
- JMP MAIN
- EXCUP CMP #$91 ;CRSR UP?
- BNE EXM5
- DEC SELECT
- BNE EXUP1
- INC SELECT
- EXUP1 LDA SELECT
- CMP TOP
- BCS EXUP2
- DEC TOP
- DEC TOP+1
- EXUP2 JMP EXMNU
- EXM5 CMP #$11 ;CRSR DOWN?
- BNE EXM7
- INC SELECT
- LDA SELECT
- CMP TOTFL
- BCC EXM8
- DEC SELECT
- EXM8 LDA SELECT
- CMP TOP+1
- BCC EXM9
- INC TOP
- INC TOP+1
- EXM9 JMP EXMNU
- EXM7 CMP #$0D ;RETURN KEY?
- BNE EXKEY
- ;
- LDA #$00 ;SET ADDR FOR DMA
- STA $FE
- LDA #$BD
- STA $FF
- LDX SELECT ;SET UP FETCH
- SELEC1 DEX
- BEQ DMAJ
- JSR ADD
- JMP SELEC1
- DMAJ LDA #$81
- STA DCMD+1
- JSR DMA ;TO DMA
- JMP MAIN
- ;
- ;
- ADD CLC
- LDA #$19 ;ADD 25 TO BASE
- ADC $FE
- STA $FE
- BCC ADD1
- INC $FF
- ADD1 RTS
- ;
- ;
- ;
- SELECT .BYT 0
- TOTFL .BYT 1 ;TOTAL # FILES,
- TOP .BYT 0,0 ; # AT TOP OF DISP
- ; ;AND BOTTOM
- ;
- ;
- ;
- ; ---- DMA SETUP AND RUN ----
- ;
- DMA LDY #$11
- LDX #$02
- DM1 LDA ($FE),Y
- STA $DF00,X
- INY
- INX
- CPX #$09
- BNE DM1
- ;
- LDA ($FE),Y
- TAX
- DCMD LDY #$80 ;DMA COMMAND
- JSR $FF50
- RTS ;RETURN TO ORIGIN
- ; ;MENU
- ;
- ;
- ; ---- DISK TO RAM ----
- ;
- ;
- ;
- DISK LDA #$1E ;GREEN
- STA CHR
- LDX #$0C
- JSR WSET
- JSR $FA17
- .BYT 146,19,' DISK DIRECTORY',13
- .BYT '╖╖╖╖╖╖╖╖╖╖╖╖╖╖╖╖╖',13
- .BYT ' PROGRAM XFR',0
- LDA #$03
- CLC
- ADC $E5 ;LOWER TOP WINDOW
- STA $E5
- JSR $CA32 ;CLEAR OVERFLOW BIT
- JSR $C150 ;CRSR HOME
- LDA #$00
- STA $FE
- LDA #$B8
- STA $FF
- LDA #$02 ;INITIALIZE DISK
- LDX #<IND
- LDY #>IND
- JSR $FFBD ;SET NAME
- LDX #$00
- JSR $FF68 ;SET BANK
- LDA #$0F
- LDX #$08
- LDY #$0F
- JSR $FFBA ;SET LFS
- JSR $FFC0 ;OPEN
- LDX #$0F
- JSR $FFC6
- JSR $FFCF CHECK FOR ERROR
- STA DERR
- LDA #$0F
- JSR $FFC3 ;CLOSE
- JSR $FFCC ;CLRCHN
- LDA DERR
- CMP #$31
- BCC DER1
- JMP MAIN
- DER1 LDA $9D
- STA KMSG
- LDA #$00 ;KERNAL MSG OFF
- STA $9D
- LDA #$01
- LDX #$08
- LDY #$00
- JSR $FFBA ;SET LFS
- LDA #$06
- LDX #<DDIR
- LDY #>DDIR
- JSR $FFBD ;SET NAME
- JSR $FFC0 ;OPEN
- LDX #$01
- JSR $FFC6 ;OPEN CHN
- LDX #$32
- HD1 JSR $FFCF ;DUMP HEADER
- DEX
- BNE HD1
- DFILE LDY #$00 ;GET FILE NAMES
- TYA ;XFER FLAG
- STA ($FE),Y
- INY
- INY
- LDX #$04
- DFL1 JSR $FFCF
- DEX
- BNE DFL1
- DFL2 JSR $FFCF
- CMP #$0D
- BEQ CLOSE
- CMP #$22 ;QUOTES?
- BNE DFL2
- DFL3 JSR $FFCF
- CMP #$22
- BEQ DFL4
- STA ($FE),Y
- INY
- JMP DFL3
- DFL4 STY FLEN
- LDA #$A0 ;PAD NAME W/SPACES
- DFL5 CPY #$12 ;16 CHARS YET?
- BEQ DFL6
- STA ($FE),Y
- INY
- JMP DFL5
- DFL6 LDY #$01
- LDX FLEN
- DEX
- DEX
- TXA
- STA ($FE),Y
- DFL8 JSR $FFCF
- BNE DFL8 ;DUMP REMAINING
- JSR FLADD
- JMP DFILE
- CLOSE LDA #$FF
- STA ($FE),Y
- LDA #$01
- JSR $FFC3
- JSR $FFCC
- LDA #$99 ;LT.GREEN
- JSR $FFD2
- JSR $CAE2 ;SCROLLING ON
- LDA #$00 ;RESET ADDR
- STA $FE
- LDA #$B8
- STA $FF
- GFLN LDY #$01
- GLP INY
- LDA ($FE),Y ;PRINT FILE NAME
- CMP #$FF
- BEQ XFRFL
- JSR $FFD2
- CMP #02
- BCS GLP
- JSR $FA17
- .BYT 166,157,0
- DKY JSR $FFE4
- LDY #$00
- CMP #$1B ;ESCAPE KEY
- BNE DKY1
- JMP MAIN
- DKY1 CMP #$59 ;Y YES
- BNE DKY2
- JSR $FFD2
- LDA #$01
- STA ($FE),Y
- JMP DKY3
- DKY2 CMP #$4E ;N NO
- BNE DKY4
- JSR $FFD2
- DKY3 JSR FLADD
- LDA #$0D
- JSR $FFD2
- JMP GFLN
- DKY4 CMP #$0D
- BNE DKY
- ;
- XFRFL JSR XFLAD ;SET ADDR
- LDA #$00 ;IND ADDR OF DISK
- STA $FC ;FILES
- LDA #$B8
- STA $FD
- DDF1 LDY #$00
- DDF2 LDA ($FC),Y ;FIND FLAGGED FILES
- BNE DDF4
- JSR DDADD
- JMP DDF2
- DDF4 INY
- LDA ($FC),Y
- STA $B7 ;FILE NAME LEN
- LDA $FD
- STA $BC ;HI BYTE FILE NAME
- CLC
- LDA #$02
- ADC $FC
- STA $BB ;LO BYTE
- BCC DDF5
- INC $BC ;HI BYTE
- DDF5 INY
- LDA ($FC),Y
- DEY
- STA ($FE),Y ;ADD NAME TO EXP
- CMP #$FF ;LAST FILE?
- BNE DDF6
- JMP MAIN ;EXIT
- DDF6 INY
- CPY #$12
- BNE DDF5
- LDA #$00
- LDX #$00 ;SET BANK
- JSR $FF68
- LDA #$01
- LDX #$08
- LDY #$00
- JSR $FFBA ;SET LFS
- JSR $FFC0 ;OPEN
- LDX #$01
- JSR $FFC6
- LDY #$11
- JSR $FFCF ;GET BEGINNING ADDR
- STA FLEN+1
- LDA #$01
- STA ($FE),Y
- INY
- JSR $FFCF
- STA FLEN+2
- LDA #$1C
- STA ($FE),Y
- LDA #$01
- JSR $FFC3 ;CLOSE
- JSR $FFCC
- LDA #$00
- LDX #$08
- LDY #$00
- JSR $FFBA ;SETLFS
- LDA #$00
- LDX #$01
- LDY #$1C
- JSR $FFD5 ;LOAD FILE
- STX ENDL
- STY ENDH
- LDY #$12
- JSR XRBEG ;STORE IN EXP RAM
- INY
- LDA ENDL
- STA ($FE),Y ;FILE SIZE
- INY
- SEC
- LDA ENDH
- SBC #$1C
- STA ($FE),Y
- JSR GODMA
- LDY #$11 ;RESTORE LOAD ADDR
- LDA FLEN+1
- STA ($FE),Y
- INY
- LDA FLEN+2
- STA ($FE),Y
- JSR XFLAD
- JSR DDADD
- JMP DDF1
- ;
- ;
- ;
- FLADD CLC ;+18 FOR NEXT FILE
- LDA #$12
- ADC $FE
- STA $FE
- BCC FLRTN
- INC $FF
- FLRTN RTS
- ;
- DDADD CLC
- LDA #$12
- ADC $FC
- STA $FC
- BCC DDRTN
- INC $FD
- DDRTN RTS
- ;
- ;
- ;
- IND .BYT 'I0'
- DDIR .BYT '$0:*=P'
- FLEN .BYT 0,0,0
- DERR .BYT 0
- KMSG .BYT 0
- ENDL .BYT 0
- ENDH .BYT 0
- ;
- ;
- ;
- ;
- ;
- ;╟