📄 mon88.lst
字号:
704 0887 E8 8C 0A DISPREG: CALL NEWLINE
705 088A BE 26 09 MOV SI,OFFSET REG_MESS ; OFFSET -> SI
706 088D 8D 3E B0 34 LEA DI,UAX
707
708 0891 B9 08 00 MOV CX,8
709 0894 E8 5F 0A NEXTDR1: CALL PUTS ; Point to first "AX=" string
710 0897 8B 05 MOV AX,[DI] ; DI points to AX value
711 0899 E8 D1 0A CALL PUTHEX4 ; Display AX value
712 089C 83 C6 05 ADD SI,5 ; point to "BX=" string
713 089F 83 C7 02 ADD DI,2 ; Point to BX value
714 08A2 E2 F0 LOOP NEXTDR1 ; etc
715
716 08A4 E8 6F 0A CALL NEWLINE
717 08A7 B9 05 00 MOV CX,5
718 08AA E8 49 0A NEXTDR2: CALL PUTS ; Point to first "DS=" string
719 08AD 8B 05 MOV AX,[DI] ; DI points to DS value
720 08AF E8 BB 0A CALL PUTHEX4 ; Display DS value
721 08B2 83 C6 05 ADD SI,5 ; point to "ES=" string
722 08B5 83 C7 02 ADD DI,2 ; Point to ES value
723 08B8 E2 F0 LOOP NEXTDR2 ; etc
724
725 08BA BE 77 2F MOV SI,OFFSET FLAG_MESS
726 08BD E8 36 0A CALL PUTS
727 08C0 BE 86 2F MOV SI,OFFSET FLAG_VALID ; String indicating which bits to display
728 08C3 8B 1D MOV BX,[DI] ; get flag value in BX
729
730 08C5 B9 08 00 MOV CX,8 ; Display first 4 bits
731 08C8 AC NEXTBIT1: LODSB ; Get display/notdisplay flag AL=DS:[SI++]
732 08C9 3C 58 CMP AL,'X' ; Display?
733 08CB 75 05 JNE SHFTCAR ; Yes, shift bit into carry and display it
734 08CD D1 E3 SAL BX,1 ; no, ignore bit
735 08CF E9 0E 00 JMP EXITDISP1
736 08D2 D1 E3 SHFTCAR: SAL BX,1
737 08D4 72 05 JC DISP1
738 08D6 B0 30 MOV AL,'0'
739 08D8 E9 02 00 JMP DISPBIT
740 08DB B0 31 DISP1: MOV AL,'1'
741 08DD E8 D9 0A DISPBIT: CALL TXCHAR
742 08E0 E2 E6 EXITDISP1: LOOP NEXTBIT1
743
744 08E2 B0 2D MOV AL,'-' ; Display seperator 0000-00000
745 08E4 E8 D2 0A CALL TXCHAR
746
747 08E7 B9 08 00 MOV CX,8 ; Display remaining 5 bits
748 08EA AC NEXTBIT2: LODSB ; Get display/notdisplay flag AL=DS:[SI++]
749 08EB 3C 58 CMP AL,'X' ; Display?
750 08ED 75 05 JNE SHFTCAR2 ; Yes, shift bit into carry and display it
751 08EF D1 E3 SAL BX,1 ; no, ignore bit
752 08F1 E9 0E 00 JMP EXITDISP2
753 08F4 D1 E3 SHFTCAR2: SAL BX,1
754 08F6 72 05 JC DISP2
755 08F8 B0 30 MOV AL,'0'
756 08FA E9 02 00 JMP DISPBIT2
757 08FD B0 31 DISP2: MOV AL,'1'
758 08FF E8 B7 0A DISPBIT2: CALL TXCHAR
759 0902 E2 E6 EXITDISP2: LOOP NEXTBIT2
760
761 0904 E8 0F 0A CALL NEWLINE ; Display CS:IP Instr
762 0907 A1 C6 34 MOV AX,[UCS]
763 090A E8 60 0A CALL PUTHEX4
764 090D B0 3A MOV AL,':'
765 090F E8 A7 0A CALL TXCHAR
766 0912 A1 C8 34 MOV AX,[UIP]
767 0915 E8 55 0A CALL PUTHEX4
768 0918 B0 20 E8 9C 0A WRSPACE
769
770 091D A1 C8 34 MOV AX,[UIP] ; Address in AX
771 0920 E8 C1 FC CALL DISASM_AX ; Disassemble Instruction & Display
772
773 0923 E9 35 FB JMP CMD ; Next Command
774
775 0926 41 58 3D 00 00 REG_MESS DB "AX=",0,0 ; Display Register names table
776 092B 20 42 58 3D 00 DB " BX=",0
777 0930 20 43 58 3D 00 DB " CX=",0
778 0935 20 44 58 3D 00 DB " DX=",0
779 093A 20 53 50 3D 00 DB " SP=",0
780 093F 20 42 50 3D 00 DB " BP=",0
781 0944 20 53 49 3D 00 DB " SI=",0
782 0949 20 44 49 3D 00 DB " DI=",0
783
784 094E 44 53 3D 00 00 DB "DS=",0,0
785 0953 20 45 53 3D 00 DB " ES=",0
786 0958 20 53 53 3D 00 DB " SS=",0
787 095D 20 43 53 3D 00 DB " CS=",0
788 0962 20 49 50 3D 00 DB " IP=",0
789
790 ;----------------------------------------------------------------------
791 ; Load Hex, terminate when ":00000001FF" is received
792 ; Mon88 may hang if this string is not received
793 ; Print '.' for each valid received frame, exit upon error
794 ; Bytes are loaded at Segment=ES
795 ;----------------------------------------------------------------------
796 0967 BE 94 2E LOADHEX: MOV SI,OFFSET LOAD_MESS ; Display Ready to receive upload
797 096A E8 89 09 CALL PUTS
798
799 096D B0 3E MOV AL,'>'
800 096F E9 33 00 JMP DISPCH
801
802 0972 86 E7 RXBYTE: XCHG BH,AH ; save AH register
803 0974 E8 14 00 CALL RXNIB
804 0977 88 C4 MOV AH,AL
805 0979 D0 E4 SHL AH,1 ; Can't use CL
806 097B D0 E4 SHL AH,1
807 097D D0 E4 SHL AH,1
808 097F D0 E4 SHL AH,1
809 0981 E8 07 00 CALL RXNIB
810 0984 0A C4 OR AL,AH
811 0986 00 C3 ADD BL,AL ; Add to check sum
812 0988 86 E7 XCHG BH,AH ; Restore AH register
813 098A C3 RET
814
815 098B E8 4E 0A RXNIB: CALL RXCHARNE ; Get Hex Character in AL
816 098E 3C 30 CMP AL,'0' ; Check to make sure 0-9,A-F
817 0990 72 11 JB ERROR ;ERRHEX
818 0992 3C 46 CMP AL,'F'
819 0994 77 0D JA ERROR ;ERRHEX
820 0996 3C 39 CMP AL,'9'
821 0998 76 06 JBE SUB0
822 099A 3C 41 CMP AL,'A'
823 099C 72 05 JB ERROR ; ERRHEX
824 099E 2C 07 SUB AL,07h ; Convert to hex
825 09A0 2C 30 SUB0: SUB AL,'0' ; Convert to hex
826 09A2 C3 RET
827
828
829 09A3 B0 45 ERROR: MOV AL,'E'
830 09A5 E8 11 0A DISPCH: CALL TXCHAR
831
832 09A8 E8 31 0A WAITLDS: CALL RXCHARNE ; Wait for ':'
833 09AB 3C 3A CMP AL,':'
834 09AD 75 F9 JNE WAITLDS
835
836 09AF 33 C9 XOR CX,CX ; CL=Byte count
837 09B1 33 DB XOR BX,BX ; BL=Checksum
838
839 09B3 E8 BC FF CALL RXBYTE ; Get length in CX
840 09B6 88 C1 MOV CL,AL
841
842 09B8 E8 B7 FF CALL RXBYTE ; Get Address HIGH
843 09BB 88 C4 MOV AH,AL
844 09BD E8 B2 FF CALL RXBYTE ; Get Address LOW
845 09C0 8B F8 MOV DI,AX ; DI=Store Address
846
847 09C2 E8 AD FF CALL RXBYTE ; Get Record Type
848 09C5 3C 01 CMP AL,EOF_REC ; End Of File Record
849 09C7 74 2A JE GOENDLD
850 09C9 3C 00 CMP AL,DATA_REC ; Data Record?
851 09CB 74 47 JE GOLOAD
852 09CD 3C 02 CMP AL,EAD_REC ; Extended Address Record?
853 09CF 74 4B JE GOEAD
854 09D1 3C 03 CMP AL,SSA_REC ; Start Segment Address Record?
855 09D3 74 02 JE GOSSA
856 09D5 EB CC JMP ERROR ;ERRREC
857
858 09D7 B9 02 00 GOSSA: MOV CX,2 ; Get 2 word
859 09DA E8 95 FF NEXTW: CALL RXBYTE
860 09DD 88 C4 MOV AH,AL
861 09DF E8 90 FF CALL RXBYTE
862 09E2 50 PUSH AX ; Push CS, IP
863 09E3 E2 F5 LOOP NEXTW
864 09E5 E8 8A FF CALL RXBYTE ; Get Checksum
865 09E8 28 C3 SUB BL,AL ; Remove checksum from checksum
866 09EA F6 D0 NOT AL ; Two's complement
867 09EC 04 01 ADD AL,1
868 09EE 38 D8 CMP AL,BL ; Checksum held in BL
869 09F0 75 B1 JNE ERROR ;ERRCHKS
870 09F2 CB RETF ; Execute loaded file
871
872 09F3 E8 7C FF GOENDLD: CALL RXBYTE
873 09F6 28 C3 SUB BL,AL ; Remove checksum from checksum
874 09F8 F6 D0 NOT AL ; Two's complement
875 09FA 04 01 ADD AL,1
876 09FC 38 D8 CMP AL,BL ; Che
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -