; 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 ;---------------------------------------------------------------------