.SBTTL . XPOKE : PROGRAM AN FPGA
; THIS IS ACTUALLY THE CODE PROTOTYPE; THE ACTUAL ROUTINE IS ; CACHED AND EXECUTED AT 'ZPOKE' IN CPU RAM. FPGA CONFIG DATA ; IS PACKED COURTESY OF BRICK.EXE.
; CALL THIS WITH A0 POINTING TO CONFIG DATA ; D6 HOLDING CONFIG WORD COUNT, LONG
; OICDSMMM ; SDO SDI SCLK DS SYSR- MUX MUX MUX
XPOKE: MOVE.B # 00000000b, D1 ; D1 : CLK 0, DATA 0 DESELECT MOVE.B # 00100000b, D2 ; D2 : CLK 1, DATA 0 DACS, MOVE.B # 10000000b, D3 ; D3 : CLK 0, DATA 1 MEZ, AND MOVE.B # 10100000b, D4 ; D4 : CLK 1, DATA 1 EEPROM
MOVEA.W # PORTE, A2 ; AIM AT THE FPGA I/O PORT MOVEA.W # SWSR, A5 ; AND MAKE POINTER TO THE WATCHDOG
MOVE.W # 5000, D7 ; WAIT ~~5 MS FOR XILINX TO ZAP XZAP: SUBQ.W # 1, D7 ; ALL ITS INTERNAL GOODIES BNE.S XZAP
XWORD: MOVE.W (A0)+, D0 ; GET A CONFIG WORD MOVE.W # 16-1, D5 ; LET'S DO 16 BITS PER PASS
XBIT: ASL.W # 1, D0 ; TEST A BIT: BCC.S XLO ; SKIP FOR DATA LOW
XHI: MOVE.B D3, (A2) ; CLOCK LOW, DATA HIGH MOVE.B D4, (A2) ; CLOCK HIGH, DATA HIGH DBF D5, XBIT ; FINISH THE WORD BRA.S XTAL
XLO: MOVE.B D1, (A2) ; CLOCK LOW, DATA LOW MOVE.B D2, (A2) ; CLOCK HIGH, DATA LOW DBF D5, XBIT ; FINISH THE WORD
XTAL: MOVE.B # 055h, (A5) ; SERVICE THE WATCHDOG MOVE.B # 0AAh, (A5) ; TIMER. ARF.
SUBQ.L # 1, D6 ; COUNT OFF ONE WORD BNE.S XWORD ; AND CARRY ON.
RTS
Yup.
John