;======================================================= ; 240x64 LCD TEST ; ----------------------------------------------------- ; ASSEMBLED WITH DASM ; PORTED FROM THE 8080/Z80 CODE IN THE DATASHEET ; MODIFIED FROM 20 COLUMN MODE TO 40 COLUMN MODE ;======================================================= PROCESSOR 6502 TXHOME = $40 TXAREA = $41 GRHOME = $42 GRAREA = $43 OFFSET = $22 ADPSET = $24 AWRON = $B0 AWROFF = $B2 CMDP = $FE09 DATP = $FE08 ORG $5000 LCDINI: LDA #$00 ; SET TEXT HOME ADDRESS 0000 TAX JSR LCDDT2 LDA #TXHOME JSR LCDCMD LDA #$00 ; SET GRAPHICS HOME ADDRESS 0200 LDX #$02 JSR LCDDT2 LDA #GRHOME JSR LCDCMD LDA #$28 ; TEXT AREA 40 COLUMN LDX #$00 JSR LCDDT2 LDA #TXAREA JSR LCDCMD LDA #$28 ; GRAPHICS AREA 40 COLUMN LDX #$00 JSR LCDDT2 LDA #GRAREA JSR LCDCMD LDA #$80 ; MODE SET JSR LCDCMD LDA #$02 ; OFFSET LDX #$00 ; [00010] SETS OFFSET TO 1000-17FF JSR LCDDT2 LDA #OFFSET JSR LCDCMD LDA #$94 ; DISPLAY MODE (TEXT ON, GRAPHICS OFF, CURSOR OFF) JSR LCDCMD LDA #$00 ; TEXT BLANK SET ADDRESS TO $0000 TAX JSR LCDDT2 LDA #ADPSET JSR LCDCMD LDA #AWRON ; TURN AUTO WRITE ON JSR LCDCMD LDX #$A0 ; CLEAR FIRST HALF OF SCREEN TXCR: LDA #$00 JSR LCDADT DEX BNE TXCR LDX #$A0 ; CLEAR SECOND HALF OF SCREEN TXCR2: LDA #$00 JSR LCDADT DEX BNE TXCR2 LDA #AWROFF ; TURN AUTO WRITE OFF JSR LCDCMD LDA #$00 ; SET ADDRESS TO $1400 TAY LDX #$14 JSR LCDDT2 LDA #ADPSET JSR LCDCMD LDA #AWRON ; TURN AUTO WRITE ON JSR LCDCMD LDX #$40 ; LOAD CG DATA INTO LCD EXCG: LDA EXTCG,Y JSR LCDADT INY DEX BNE EXCG LDA #AWROFF ; AUTO WRITE OFF JSR LCDCMD LDA #$5C ; SET ADDRESS TO $005C (LINE 3, COLUMN 12) LDX #$00 JSR LCDDT2 LDA #ADPSET JSR LCDCMD LDA #AWRON ; AUTO WRITE ON JSR LCDCMD LDX #$0D ; PRINT 13 CHARACTERS LDY #$00 TXLP1: LDA TXPRT,Y ; POINTS TO TOSHIBA JSR LCDADT INY DEX BNE TXLP1 LDA #AWROFF ; AUTO WRITE OFF JSR LCDCMD LDA #$B0 ; SET ADDRESS TO $B0 (LINE 5, COLUMN 16) LDX #$00 JSR LCDDT2 LDA #ADPSET JSR LCDCMD LDA #AWRON ; AUTO WRITE ON JSR LCDCMD LDX #$06 ; PRINT 6 CHARACTERS LDY #$00 TXLP2: LDA EXPRT1,Y ; PRINT UPPER JSR LCDADT INY DEX BNE TXLP2 LDA #AWROFF JSR LCDCMD LDA #$D8 ; SET ADDRESS TO $B0 (LINE 5, COLUMN 16) LDX #$00 JSR LCDDT2 LDA #ADPSET JSR LCDCMD LDA #AWRON ; AUTO WRITE ON JSR LCDCMD LDX #$06 ; PRINT 6 CHARACTERS LDY #$00 TXLP3: LDA EXPRT2,Y ; PRINT LOWER JSR LCDADT INY DEX BNE TXLP3 LDA #AWROFF ; AUTO WRITE OFF JSR LCDCMD PEND: RTS ; COMPATABILITY WITH PILOT WAS A DIE LOOP ;------------------------------ ; LCD COMMAND WRITE ;------------------------------ LCDCMD: PHA LCDCM1: LDA CMDP ; WAIT READY AND #$03 CMP #$03 BNE LCDCM1 PLA STA CMDP ; SEND COMMAND RTS ;------------------------------ ; LCD DATA WRITE (1 BYTE) ;------------------------------ LCDDT1: PHA LCDD11: LDA CMDP ; WAIT READY AND #$03 CMP #$03 BNE LCDD11 PLA STA DATP ; SEND BYTE RTS ;------------------------------ ; LCD DATA WRITE (2 BYTES) ;------------------------------ LCDDT2: PHA LCDD21: LDA CMDP ; WAIT READY AND #$03 CMP #$03 BNE LCDD21 PLA STA DATP ; SEND BYTE LCDD22: LDA CMDP ; WAIT READY AND #$03 CMP #$03 BNE LCDD22 TXA STA DATP ; SEND BYTE RTS ;------------------------------ ; LCD AUTOWRITE ;------------------------------ LCDADT: PHA LCDAD1: LDA CMDP ; WAIT AUTO WRITE READY AND #$08 CMP #$08 BNE LCDAD1 PLA STA DATP ; SEND BYTE RTS TXPRT: .BYTE $34, $00, $2F, $00, $33, $00, $28, $00, $29, $00, $22, $00, $21 ; TOSHIBA EXPRT1: .BYTE $80, $81, $00, $00, $84, $85 ; UPPER EXPRT2: .BYTE $82, $83, $00, $00, $86, $87 ; LOWER EXTCG: .BYTE $01, $01, $FF, $01, $3F, $21, $3F, $21 ; CG DATA .BYTE $00, $00, $FF, $00, $FC, $04, $FC, $04 .BYTE $21, $3F, $05, $0D, $19, $31, $E1, $01 .BYTE $04, $FC, $40, $60, $30, $1C, $07, $00 .BYTE $08, $08, $FF, $08, $09, $01, $01, $07 .BYTE $10, $10, $FF, $10, $10, $00, $00, $FC .BYTE $00, $00, $00, $01, $07, $3C, $E7, $00 .BYTE $18, $30, $60, $C0, $00, $00, $E0, $3F