ca65 V2.17 - Git 582aa41 Main file : PROMER.ca65 Current file: PROMER.ca65 000000r 1 ; Acorn PROM Programmer Board (200.007) Software 000000r 1 ; From Technical Manual Issue 2 Jan-1981 000000r 1 ; 000000r 1 ; Chris Oddy February 2019 000000r 1 ; 000000r 1 ; Execute from $2840 (START) 000000r 1 ; 000000r 1 ; Zeropage Registers 000000r 1 ; 000000r 1 bflip := $80 000000r 1 ck := $81 000000r 1 hl := $81 000000r 1 ve := $82 000000r 1 bl := $83 000000r 1 howvec := $84 000000r 1 toblow := $86 000000r 1 temp := $88 000000r 1 regmap := $8A 000000r 1 job := $8B 000000r 1 from := $8C 000000r 1 point := $8E 000000r 1 mask := $8E 000000r 1 tries := $8F 000000r 1 extra := $90 000000r 1 count := $90 000000r 1 curent := $91 000000r 1 number := $92 000000r 1 crc := $93 000000r 1 buff := $0100 000000r 1 ; 000000r 1 ; Hardware Address's 000000r 1 ; 000000r 1 kb := $0E21 ; keyboard 000000r 1 blower := $1980 ; base address for 8255 PIA 000000r 1 porta := $1980 ; 8255 port A 000000r 1 portb := $1981 ; 8255 port B 000000r 1 portc := $1982 ; 8255 port C 000000r 1 cwr := $1983 ; 8255 control register 000000r 1 ; 000000r 1 ; ASCII 000000r 1 ; 000000r 1 CR := $0D ; Carriage Return 000000r 1 ESC := $1B ; ESCape 000000r 1 SPACE := $20 ; SPACE 000000r 1 ; 000000r 1 ; Vectors 000000r 1 ; 000000r 1 brkvec := $0202 ; BRK Vector 000000r 1 ; 000000r 1 ; OS Calls 000000r 1 ; 000000r 1 OSWRCH := $FFF4 ; WRite CHaracter to output channel 000000r 1 OSASCI := $FFE9 ; WRite CHaracter to output channel (adds LF if CR) 000000r 1 OSRDCH := $FFE3 ; ReaD CHaracter from input channel 000000r 1 OSCRLF := $FFED ; write CRLF to output channel 000000r 1 OSECHO := $FFE6 ; reads character from Input channel and ECHOs it to output channel 000000r 1 OSCLI := $FFF7 ; call Command Line Interpreter 000000r 1 ; 000000r 1 .org $2800 002800 1 ; 002800 1 68 VSTRNG: pla 002801 1 85 88 sta temp 002803 1 68 pla 002804 1 85 89 sta temp+1 002806 1 A0 00 vstrlp: ldy #$00 002808 1 E6 88 inc temp 00280A 1 D0 02 bne inctpc 00280C 1 E6 89 inc temp+1 00280E 1 B1 88 inctpc: lda (temp),y 002810 1 C9 EA cmp #$EA 002812 1 F0 06 beq vstrnx 002814 1 20 E9 FF jsr OSASCI 002817 1 4C 06 28 jmp vstrlp 00281A 1 6C 88 00 vstrnx: jmp (temp) 00281D 1 00281D 1 A2 00 BUFFIN: ldx #$00 ; Input Buffer Routine 00281F 1 20 E6 FF answer: jsr OSECHO 002822 1 9D 00 01 sta buff,x 002825 1 C9 7F cmp #$7F ; check for delete 002827 1 D0 05 bne enterd 002829 1 CA buffa: dex 00282A 1 30 F1 bmi BUFFIN 00282C 1 10 F1 bpl answer 00282E 1 C9 0D enterd: cmp #$0D ; terminated by CR 002830 1 D0 01 bne notdun 002832 1 60 rts 002833 1 E8 notdun: inx 002834 1 E0 28 cpx #$28 ; limit buffer length 002836 1 D0 E7 bne answer 002838 1 A9 7F lda #$7F 00283A 1 20 F4 FF jsr OSWRCH 00283D 1 4C 29 28 jmp buffa 002840 1 002840 1 A9 40 START: lda #START 002847 1 8D 03 02 sta brkvec+1 00284A 1 20 00 28 jsr VSTRNG 00284D 1 0D 57 68 69 .byte CR,"Which PROM ?" 002851 1 63 68 20 50 002855 1 52 4F 4D 20 00285A 1 EA nop 00285B 1 20 1D 28 jsr BUFFIN ; get reply 00285E 1 A0 00 ldy #$00 002860 1 A2 00 find: ldx #$00 002862 1 BD 00 01 which: lda buff,x ; find entry in table 002865 1 D9 19 29 cmp TABLE,y 002868 1 D0 13 bne next ; not this entry 00286A 1 E8 inx 00286B 1 C8 iny 00286C 1 E0 04 cpx #$04 ; for all four characters 00286E 1 D0 F2 bne which 002870 1 A2 07 ldx #$07 ; good we have found it 002872 1 B9 19 29 found: lda TABLE,y ; so put parameters in page zero 002875 1 95 80 sta bflip,x 002877 1 C8 iny 002878 1 CA dex 002879 1 10 F7 bpl found 00287B 1 30 1C bmi what ; and go to next step 00287D 1 E8 next: inx 00287E 1 C8 iny 00287F 1 E0 0C cpx #$0C 002881 1 D0 FA bne next 002883 1 C0 44 cpy #$44 ; check for end of table 002885 1 90 D9 bcc find 002887 1 AD 00 01 lda buff 00288A 1 C9 2A cmp #'*' ; check for OS command 00288C 1 D0 B2 bne START ; unknown command 00288E 1 A9 20 lda #SPACE 002890 1 8D 00 01 sta buff 002893 1 20 F7 FF jsr OSCLI ; and hand to OS 002896 1 4C 40 28 jmp START 002899 1 002899 1 20 00 28 what: jsr VSTRNG 00289C 1 42 4C 4F 57 .byte "BLOW : READ : VERIFY : CLEAR",CR 0028A0 1 20 3A 20 52 0028A4 1 45 41 44 20 0028B9 1 45 6E 74 65 .byte "Enter initial letter ?" 0028BD 1 72 20 69 6E 0028C1 1 69 74 69 61 0028CF 1 EA nop 0028D0 1 20 1D 28 jsr BUFFIN ; get reply 0028D3 1 AD 00 01 lda buff 0028D6 1 85 8B sta job 0028D8 1 C9 43 cmp #'C' 0028DA 1 F0 3A beq nonum 0028DC 1 20 00 28 where: jsr VSTRNG ; get number of needed 0028DF 1 46 72 6F 6D .byte "From ?" 0028E3 1 20 3F 0028E5 1 EA nop 0028E6 1 20 1D 28 jsr BUFFIN ; get reply 0028E9 1 A2 00 ldx #$00 ; and translate from ASCII 0028EB 1 86 8C stx from 0028ED 1 86 8D stx from+1 0028EF 1 CA dex 0028F0 1 E8 numlop: inx 0028F1 1 BD 00 01 lda buff,x 0028F4 1 C9 30 cmp #'0' 0028F6 1 90 1E bcc nonum 0028F8 1 C9 3A cmp #$3A 0028FA 1 90 08 bcc numcon 0028FC 1 E9 07 sbc #$07 0028FE 1 90 16 bcc nonum 002900 1 C9 40 cmp #$40 002902 1 B0 12 bcs nonum 002904 1 29 0F numcon: and #$0F 002906 1 0A asl a 002907 1 0A asl a 002908 1 0A asl a 002909 1 0A asl a 00290A 1 A0 04 ldy #$04 00290C 1 0A numcin: asl a 00290D 1 26 8C rol from 00290F 1 26 8D rol from+1 002911 1 88 dey 002912 1 D0 F8 bne numcin 002914 1 F0 DA beq numlop 002916 1 6C 86 00 nonum: jmp (toblow) 002919 1 002919 1 ; PROM/EPROM Programming Data 002919 1 35 37 31 48 TABLE: .byte "571H" 00291D 1 2A .byte >FUSE ; what to blow 00291E 1 A9 .byte FUSE 00292A 1 A9 .byte EPROM ; what to blow 002936 1 61 .byte DOTWO ; how to blow it - no of Kbytes 002938 1 C7 .byte EPROM ; what to blow 002942 1 61 .byte CORE ; how to blow it - no of Kbytes 002944 1 CC .byte EPROM ; what to blow 00294E 1 61 .byte DOFOUR ; how to blow it - no of Kbytes 002950 1 C2 .byte EPROM ; what to blow 00295A 1 61 .byte DOTWO ; how to blow it - no of Kbytes 00295C 1 C7 .byte