; Aufgabe Nr.: Speichermodul fuer uP- Praktikum II
; Autor: Joerg Vollandt
; erstellt am : 30.06.1994
; letzte Aenderung am : 01.07.1994
; Bemerkung : Wird in das gegebene File "MAIN.ASM" includet.
;
; Dateiname : debug.asm
;
;---------------------------------------------------------------------
SEGMENT CODE
;---------------------------------------------------------------------
; Funktion : Dump ext. RAM.
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
N_BYTES EQU 12
DUMP: PUSH PSW
PUSH ACC
PUSH B
PUSH_DPTR
DUMP_ADR: LCALL LCD_CLEAR
LCD 0h,"Start="
LCALL IN_DPTR
DUMP_LINE: LCALL LCD_CLEAR ; 1. Zeile
LCALL DPTR_LCD
MOV A,#':'
LCALL LCD_WRITE_CHAR
MOV B,#N_BYTES
DUMP_BYTE: MOVX A,@DPTR
LCALL A_LCD
INC DPTR
MOV A,#' '
LCALL LCD_WRITE_CHAR
DJNZ B,DUMP_BYTE
MOV A,#40h ; 2. Zeile
LCALL LCD_SET_DD_RAM_ADDRESS
LCALL DPTR_LCD
MOV A,#':'
LCALL LCD_WRITE_CHAR
MOV B,#(N_BYTES-1)
DUMP_BYTE2: MOVX A,@DPTR
LCALL A_LCD
INC DPTR
MOV A,#' '
LCALL LCD_WRITE_CHAR
DJNZ B,DUMP_BYTE2
MOVX A,@DPTR
LCALL A_LCD
INC DPTR
LCALL CHAR_ACC
LCALL UPCASE
IFMAKE 'D',LJMP DUMP_ADR
IFMAKE 'X',SUBB_DPTR N_BYTES
IFMAKE 'E',SUBB_DPTR (3*N_BYTES)
IFMAKE 'Q',LJMP DUMP_ENDE
LJMP DUMP_LINE
DUMP_ENDE:
POP_DPTR
POP B
POP ACC
POP PSW
RET
;---------------------------------------------------------------------
; Funktion : Ausgabe der Start- und Endadr. des definierten ext. Speichers.
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
ADRESSEN:
PUSH ACC
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"Startadr.="
MOV DPTR,#MEM_ANF
LCALL DPTR_LCD
LCD 0Eh,";Endadr.="
MOV DPTR,#MEM_ENDE
LCALL DPTR_LCD
LCD 1bh,";Groesse="
MOV DPTR,#(MEM_ENDE-MEM_ANF)
LCALL DPTR_LCD
LCD 40h,"NEXT_FREE="
GET_16 NEXT_FREE
LCALL DPTR_LCD
LCD 4Eh,";RD_P="
GET_16 RD_POINTER
LCALL DPTR_LCD
LCALL CHECK_SUM
LCD 5bh,";CHECK="
MOV DPL,CHECKSUMME
MOV DPH,CHECKSUMME+1
LCALL DPTR_LCD
LCALL WAIT_KEY
POP_DPTR
POP ACC
RET
;---------------------------------------------------------------------
; Funktion : Ausgabe der Variablen fuer die Synchronisation
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
DEBUG_SYNC:
PUSH ACC
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"R_Sync-C.="
MOV a,R_Sync_Counter
LCALL A_LCD
jb runningbit,DESYNC1
LCD 0ch,"not "
DESYNC1: LCD 10h,"running"
jb Sync_Waiting,DESYNC2
LCD 18h,"not "
DESYNC2: LCD 1ch,"Sync.waiting"
LCD 0h,"T_Sync-C.="
MOV a,T_Sync_Counter
LCALL A_LCD
jb Ready_Waiting,DESYNC3
LCD 4ch,"not "
DESYNC3: LCD 50h,"Ready waiting"
POP_DPTR
POP ACC
LCALL WAIT_KEY
RET
;---------------------------------------------------------------------
; Funktion : Speicher fuellen.
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
FUELLEN:
PUSH PSW
PUSH ACC
PUSH B
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"Fuellwert ="
LCALL IN_ACC
MOV B,A
MOV DPTR,#MEM_ANF
FUELLEN1: MOV A,B
MOVX @DPTR,A
INC DPTR
MOV A,DPH
CJNE A,#(MEM_ENDE/256),FUELLEN1
MOV A,DPL
CJNE A,#(MEM_ENDE#256),FUELLEN1
LCD 40h,"Speicher gefuellt."
LCALL WAIT_KEY
POP_DPTR
POP B
POP ACC
POP PSW
RET
;---------------------------------------------------------------------
; Funktion : Schreiben in Speicher
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
SCHREIBEN:
PUSH PSW
PUSH ACC
PUSH B
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"Schreibadr.="
LCALL IN_DPTR
LCD 12h,"Schreibwert="
LCALL IN_ACC
LCALL ACC_WR_MEM
LCD 40h,"Wert geschrieben."
LCALL WAIT_KEY
POP_DPTR
POP B
POP ACC
POP PSW
RET
;---------------------------------------------------------------------
; Funktion : Lesen aus Speicher
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
LESEN:
PUSH PSW
PUSH ACC
PUSH B
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"Leseadr.="
LCALL IN_DPTR
LCALL ACC_RD_MEM
LCD 40h,"Wert ="
LCALL A_LCD
LCALL WAIT_KEY
POP_DPTR
POP B
POP ACC
POP PSW
RET
;---------------------------------------------------------------------
; Funktion : Speicher auf PC schreiben
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
WR_PC:
LCALL LCD_CLEAR
LCD 0h,"Speicher auf PC"
LCALL WR_MEM_PC
LCD 40h,"o.k."
LCALL WAIT_KEY
RET
;---------------------------------------------------------------------
; Funktion : Speicher initialisieren
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
SPEICHER_INIT:
LCALL LCD_CLEAR
LCD 0h,"Speicher initialisieren"
LCALL INIT_MEM
LCD 40h,"o.k."
LCALL WAIT_KEY
RET
;---------------------------------------------------------------------
; Funktion : Speicher zum lesen zuruecksetzen
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
RESET:
LCALL LCD_CLEAR
LCD 0h,"Speicher reset"
LCALL RESET_MEM
LCD 40h,"o.k."
LCALL WAIT_KEY
RET
;---------------------------------------------------------------------
; Funktion : Element aus Speicher lesen.
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
GET:
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"Element lesen von:"
GET_16 RD_POINTER
LCALL DPTR_LCD
LCALL GET_ELEMENT_MEM
JC GET_ERROR
LCD 40h,"o.k. ACC="
LCALL A_LCD
LCALL WAIT_KEY
POP_DPTR
RET
GET_ERROR:
LCD 40h,"Fehler."
LCALL WAIT_KEY
POP_DPTR
RET
;---------------------------------------------------------------------
; Funktion : Element in den Speicher schreiben
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
PUT:
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"Element schreiben ab:"
GET_16 NEXT_FREE
LCALL DPTR_LCD
LCD 20h,"ACC="
LCALL IN_ACC
LCALL PUT_ELEMENT_MEM
JC PUT_ERROR
LCD 40h,"o.k."
LCALL WAIT_KEY
POP_DPTR
RET
PUT_ERROR:
LCD 40h,"Fehler."
LCALL WAIT_KEY
POP_DPTR
RET
;---------------------------------------------------------------------
; Funktion : Speicher von PC lesen
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
RD_PC:
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"Speicher von PC"
CLR READY
LCALL RD_MEM_PC
RD_PC_LOOP:
JNB MSG,$
LCALL MEM_SCHEDULER
JNB READY,RD_PC_LOOP
JB CRC,RD_PC_ERROR
LCD 10h,"o.k."
LCALL WAIT_KEY
POP_DPTR
RET
RD_PC_ERROR:
LCD 10h,"CRC- Fehler beim laden."
LCALL WAIT_KEY
POP_DPTR
RET
;---------------------------------------------------------------------
; Funktion : Zeiger setzen
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
SET_NEXT_FREE:
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"next_free="
lcall IN_DPTR
SET_16 NEXT_FREE
LCALL WAIT_KEY
POP_DPTR
RET
SET_RD_POINTER:
PUSH_DPTR
LCALL LCD_CLEAR
LCD 0h,"RD_POINTER="
lcall IN_DPTR
SET_16 RD_POINTER
LCALL WAIT_KEY
POP_DPTR
RET
;---------------------------------------------------------------------
; Funktion : Msg_Handler_Test
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
; ****************************************************************************
; R0 EmpfДnger (logische Adresse)
; R1 Message
; R2 - R7 Parameter
; ****************************************************************************
Msg_Handler_Test:
PUSH ACC
PUSH AR0
PUSH AR1
LCALL LCD_CLEAR
LCD 0h,"Msg_Handler_Test"
LCD 16h,"R0="
LCALL IN_ACC
MOV R0,A
LCD 20h,"R1="
LCALL IN_ACC
MOV R1,A
LCALL Dispatch_Msg
POP AR1
POP AR0
POP ACC
ret
;---------------------------------------------------------------------
; Funktion : Testbit toggeln
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
T_TEST:
LCALL LCD_CLEAR
LCD 0h,"TEST"
LCALL WAIT_KEY
CPL TESTBIT
ret
;---------------------------------------------------------------------
; Funktion : Test RUN- Manager
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
TEST_RUN:
LCD 0h,"TEST RUN_ Manager"
LCALL WAIT_KEY
LCALL START_RUNNING
LCALL LCD_CLEAR
ret
;---------------------------------------------------------------------
; Funktion : Debuger fuer das Speichermodul
; Aufrufparameter : -
; Ruechgabeparameter : -
; Veraenderte Register :
; Stackbedarf :
; Zeitbedarf :
;
DEBUG_MEM:
mov a,#1
lcall lcd_curser_onoff
DEBUG_START:
LCALL LCD_CLEAR
LCD 0,"DEBUG SPEICHERMODUL "
DEBUG_LOOP:
JNB KB_CHAR_READY,DEBUG3
LJMP DEBUG1
DEBUG3:
LJMP DEBUG_LOOP
DEBUG1: CLR KB_CHAR_READY
MOV A,KB_CHAR_BUFFER
LCALL LCD_WRITE_CHAR
LCALL UPCASE
IFCALL 'A',ADRESSEN
IFCALL 'B',LOAD_ROB
IFCALL 'C',LOAD_FRAES
IFCALL 'D',DUMP
IFCALL 'E',Msg_Handler_Test
IFCALL 'F',FUELLEN
IFCALL 'G',GET
IFCALL 'H',SAVE_ROB
IFCALL 'I',SAVE_FRAES
IFCALL 'J',SPEICHER_INIT
IFCALL 'K',T_TEST
IFCALL 'L',LESEN
IFCALL 'M',STORE_ROB
IFCALL 'O',RESET
IFCALL 'P',PUT
IFMAKE 'Q',LJMP DEBUG_ENDE
IFCALL 'R',RD_PC
IFCALL 'S',SCHREIBEN
IFCALL 'T',TEST_RUN
IFCALL 'U',SET_RD_POINTER
IFCALL 'W',WR_PC
IFCALL 'X',DEBUG_SYNC
IFCALL 'Y',STORE_SYNC
IFCALL 'Z',SET_NEXT_FREE
ljmp DEBUG_START
DEBUG_ENDE:
LCALL LCD_CLEAR
ret
;=====================================================================
; END
;---------------------------------------------------------------------