AS05 Assembler for M6805 [1.11].                                     Page    1
-------------------------------- LCDSER5A.ASM --------------------------------

172 lines read, no errors in pass 1.
                        ******************************************************
                        *  LCDSER5.ASM                                        
                        *  LCD-DISPLAY SYSTEMTREIBER            VERSION 11.01.
                        ******************************************************
                        *  ANSTEUERUNG SERIELL 74HC164 / 8-BIT MODUS          
                        *  NEU: DIESE VERSION KANN JETZT NEGATIVE ZAHLEN ANZEI
                        *  ACHTUNG:                                           
                        *  ALLE ZEICHEN WERDEN VON RECHTS NACH LINKS GESCHRIEB
                        ******************************************************
                        *  ADRESSEN ZUR DEFINATION IN DER  *.BAS DATEI        
                        *  define LCDZAHL     &H101   'MEHRSTELLIGE ZAHLEN AUS
                        *  define LCDBEFEHL   &H19A   'LCD-BEFEHLE         AUS
                        *  define LCDZEICHEN  &H1A0   'ASCII ZEICHEN       AUS
                        ******************************************************
                        
00a1 =                  USRDATA equ $A1 ; Anfang der 24 Userbytes im RAM
0091 =                  VSTACK  equ $91 ; Anfang der 7 Words des Rechen-Stacks
0091 =                  _A      equ $91 ; zuletzt auf den Rechen-Stack gebrach
0092 =                  _A_lo   equ $92 ; Rechenergebnis 
0093 =                  _B      equ $93 
0094 =                  _B_lo   equ $94
0095 =                  _C      equ $95
0096 =                  _C_lo   equ $96 
0097 =                  _D      equ $97
0098 =                  _D_lo   equ $98 
0099 =                  _E      equ $99
009a =                  _E_lo   equ $9A 
009b =                  _F      equ $9B
009c =                  _F_lo   equ $9C 
009d =                  _G      equ $9D
009e =                  _G_lo   equ $9E
                        * PORTBELEGUNGEN *************************************
0007 =                  lshdat     equ 7     ;DATEN-IN SCHIEBEREGISTER C-CONTR
0006 =                  lshclk     equ 6     ;CLOCK    SCHIEBEREGISTER C-CONTR
0005 =                  lcdclk     equ 5     ;CLOCK    LCD-DISPLAY     C-CONTR
0004 =                  lcdrs      equ 4     ;RS       LCD-DISPLAY     C-CONTR
0001 =                  pcdat      equ $01   ;PORT B = CCPORT 1 BIS 8
0005 =                  pcdir      equ $05   ;PORT B DATENRICHTUNGSREGISTER
                        * ADRESSEN UEBERGEBEN ********************************
1187 =                  NumPush    equ $1187
13ba =                  Abs        equ $13BA
137e =                  Div        equ $137E
1360 =                  Mul        equ $1360
1351 =                  Sub        equ $1351
                        * LCD INTERFACE **************************************
0101 =                  	org $101
0101 :                  LCDZAHL:
0101 : b695             	lda _C                ;LADE ACCU ..
0103 : b797             	sta _D                ;SPEICHERE ACCU IN ..
0105 : b696             	lda _C_lo             ;LADE ACCU ..
0107 : b798             	sta _D_lo             ;SPEICHERE ACCU IN ..
                        
0109 : b691             	lda _A                ;LADE ACCU ..
010b : b795             	sta _C                ;SPEICHERE ACCU IN ..
010d : b692             	lda _A_lo             ;LADE ACCU ..
010f : b796             	sta _C_lo             ;SPEICHERE ACCU IN ..
                        
0111 : b697             	lda _D                ;LADE ACCU ..
0113 : b791             	sta _A                ;SPEICHERE ACCU IN ..
0115 : b698             	lda _D_lo             ;LADE ACCU ..
0117 : b792             	sta _A_lo             ;SPEICHERE ACCU IN ..
AS05 Assembler for M6805 [1.11].                                     Page    2
-------------------------------- LCDSER5A.ASM --------------------------------

                        
0119 : 0f9105           	brclr 7,_A,nextdigit  ;WENN BIT X GELOESCHT, DANN SPR
011c : 1093             	bset 0, _B            ;SETZE EIN BIT IN SPEICHERZELLE
011e : cd13ba           	jsr Abs               ;SPRINGE ZUR UNTERROUTINE ..
0121 :                  nextdigit:
0121 : cd1187           	jsr NumPush           ;SPRINGE ZUR UNTERROUTINE ..
0124 : cd1187           	jsr NumPush           ;SPRINGE ZUR UNTERROUTINE ..
0127 : b695             	lda _C                ;LADE ACCU ..
0129 : b791             	sta _A                ;SPEICHERE ACCU IN ..
012b : b793             	sta _B                ;SPEICHERE ACCU IN ..
012d : b696             	lda _C_lo             ;LADE ACCU ..
012f : b692             	lda _A_lo             ;LADE ACCU ..
0131 : b694             	lda _B_lo             ;LADE ACCU ..
0133 : cd1187           	jsr NumPush           ;SPRINGE ZUR UNTERROUTINE ..
0136 : cd01cc           	jsr load10            ;SPRINGE ZUR UNTERROUTINE ..
0139 : cd137e           	jsr Div               ;SPRINGE ZUR UNTERROUTINE ..
013c : cd1187           	jsr NumPush           ;SPRINGE ZUR UNTERROUTINE ..
013f : cd01cc           	jsr load10            ;SPRINGE ZUR UNTERROUTINE ..
0142 : cd1360           	jsr Mul               ;SPRINGE ZUR UNTERROUTINE ..
0145 : cd1351           	jsr Sub               ;SPRINGE ZUR UNTERROUTINE ..
0148 : be92             	ldx _A_lo             ;LADE INDEX-REGISTER ..
014a : d601d8           	lda ledcodes,x        ;LADE ACCU ..
014d : be96             	ldx _C_lo             ;LADE INDEX-REGISTER ..
014f : 270e             	beq nopoint           ;WENN ZERO-BIT GESETZT, DANN SP
0151 : 3a96             	dec _C_lo             ;VERMINDERE UM EINS ..
0153 : 260a             	bne nopoint           ;WENN NICHT GLEICH, DANN SPRING
0155 : a62c             	lda #$2C              ;LADE ACCU (ASCII "KOMMA")
0157 : cd01a2           	jsr digit             ;KOMMA AUSGEBEN
015a : be92             	ldx _A_lo             ;LADE INDEX-REGISTER ..
015c : d601d8           	lda ledcodes,x        ;LADE ACCU ..
015f :                  nopoint:
015f : cd01a2           	jsr digit             ;SPRINGE ZUR UNTERROUTINE ..
0162 : cd01cc           	jsr load10            ;SPRINGE ZUR UNTERROUTINE ..
0165 : cd137e           	jsr Div               ;SPRINGE ZUR UNTERROUTINE ..
0168 : b694             	lda _B_lo             ;LADE ACCU ..
016a : 2606             	bne no0check          ;WENN NICHT GLEICH, DANN SPRING
016c : b691             	lda _A                ;LADE ACCU ..
016e : ba92             	ora _A_lo             ;BITWEISE ODER VERKNUEPFUNG
0170 : 2705             	beq sign              ;WENN ZERO-BIT GESETZT, DANN SP
0172 :                  no0check:
0172 : 3a96             	dec _C_lo             ;VERMINDERE UM EINS ..
0174 : 26ab             	bne nextdigit         ;WENN NICHT GLEICH, DANN SPRING
0176 : 81               	rts                   ;UNTERROUTINE BEENDEN
                        * FUEHRENDE NULL UNTERDRUECKEN ***********************
0177 :                  sign:
0177 : 3a96             	dec _C_lo             ;VERMINDERE UM EINS ..
0179 : 271e             	beq exit              ;WENN ZERO-BIT GESETZT, DANN SP
017b : 019314           	brclr 0,_B,space      ;WENN BIT X GELOESCHT, DANN SPR
017e : 039308           	brclr 1,_B,minus      ;WENN BIT X GELOESCHT; DANN SPR
0181 : a630             	lda #$30              ;LADE ACCU (ASCII ZEICHEN "NULL
0183 : cd01a2           	jsr digit             ;SPRINGE ZUR UNTERROUTINE ..
0186 : cc018e           	jmp nextspace         ;SPRINGE NACH NEXTSPACE
0189 :                  minus:
0189 : a62d             	lda #$2D              ;LADE ACCU (ASCII "MINUSZEICHEN
018b : cd01a2           	jsr digit             ;SPRINGE ZUR UNTERROUTINE ..
018e :                  nextspace: 
018e : 3a96             	dec _C_lo             ;VERMINDERE UM EINS ..
0190 : 2707             	beq exit              ;WENN ZERO-BIT GESETZT, DANN SP
0192 :                  space:
0192 : a620             	lda #$20              ;LADE ACCU (ASCII ZEICHEN "SPAC
0194 : cd01a2           	jsr digit             ;SPRINGE ZUR UNTERROUTINE ..
0197 : 20f5             	bra nextspace         ;SPRINGE IMMER
AS05 Assembler for M6805 [1.11].                                     Page    3
-------------------------------- LCDSER5A.ASM --------------------------------

0199 :                  exit:
0199 : 81               	rts                   ;UNTERROUTINE BEENDEN
                        * AUSGABE EINES ZEICHENS *****************************
019a :                  LCDBEFEHL:
019a : b692             	lda _A_lo             ;LADE ACCU ..
019c : 1901             	bclr lcdrs,pcdat      ;RS = 0 BEFEHL SENDEN
019e : 2004             	bra befehl            ;SPRINGE IMMER NACH BEFEHL
01a0 :                  LCDZEICHEN:
01a0 : b692             	lda _A_lo             ;LADE ACCU ..
01a2 :                  digit:
01a2 : 1801             	bset lcdrs,pcdat      ;RS = 1 ZEICHEN SENDEN
01a4 :                  befehl:
01a4 : cd01c0           	jsr shift             ;SPRINGE ZUR UNTERROUTINE ..
01a7 : cd01c0           	jsr shift             ;SPRINGE ZUR UNTERROUTINE ..
01aa : cd01c0           	jsr shift             ;SPRINGE ZUR UNTERROUTINE ..
01ad : cd01c0           	jsr shift             ;SPRINGE ZUR UNTERROUTINE ..
01b0 : cd01c0           	jsr shift             ;SPRINGE ZUR UNTERROUTINE ..
01b3 : cd01c0           	jsr shift             ;SPRINGE ZUR UNTERROUTINE ..
01b6 : cd01c0           	jsr shift             ;SPRINGE ZUR UNTERROUTINE ..
01b9 : cd01c0           	jsr shift             ;SPRINGE ZUR UNTERROUTINE ..
01bc : cd01d3           	jsr enable1           ;SPRINGE ZUR UNTERROUTINE ..
01bf : 81               	rts                   ;UNTERROUTINE BEENDEN
                        * BIT AUSGEBEN UND CLOCK ERZEUGEN ********************
01c0 :                  shift:
01c0 : 1f01             	bclr lshdat,pcdat     ;LOESCHE EIN BIT IN SPEICHERZEL
01c2 : 44               	lsra                  ;LOGISCHES RECHTS-SCHIEBEN
01c3 : 2402             	bcc shftex            ;WENN CARRY-BIT GELOESCHT, DANN
01c5 : 1e01             	bset lshdat,pcdat     ;SETZE EIN BIT IN SPEICHERZELLE
01c7 :                  shftex:
01c7 : 1c01             	bset lshclk,pcdat     ;SETZE EIN BIT IN SPEICHERZELLE
01c9 : 1d01             	bclr lshclk,pcdat     ;LOESCHE EIN BIT IN SPEICHERZEL
01cb : 81               	rts                   ;UNTERROUTINE BEENDEN
                        * TEILUNGSFAKTOR / ZAHLENSYSTEM EINSTELLEN ***********
01cc :                  load10:
01cc : 3f91             	clr _A                ;LOESCHE ..
01ce : a60a             	lda #10               ;LADE ACCU MIT TEILUNGSFAKTOR 2
01d0 : b792             	sta _A_lo             ;SPEICHERE ACCU IN ..
01d2 : 81               	rts                   ;UNTERROUTINE BEENDEN
                        * CLOCK FUER LCD-DISPLAY ERZEUGEN ********************
01d3 :                  enable1:
01d3 : 1a01             	bset lcdclk,pcdat
01d5 : 1b01             	bclr lcdclk,pcdat
01d7 : 81               	rts
                        * TABELLE ZUR ZAHLENAUSGABE (0 BIS F) ****************
01d8 :                  ledcodes:
01d8 : 3031323334       	fcb $30, $31, $32, $33, $34
01dd : 3536373839       	fcb $35, $36, $37, $38, $39
01e2 : 414243444546     	fcb $41, $42, $43, $44, $45, $46
                        * ENDE ***************************************** LCDSE
No errors in pass 2.
