Last active
August 29, 2015 14:08
-
-
Save fujitanozomu/b81f78040fdd8f91e70b to your computer and use it in GitHub Desktop.
「プロ生ちゃん #カレンダープログラミング プチコンテスト 2014」ではない
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:200100001E5DCDAB01D56B621B3E04CD9801193E19CD9801B7ED523E04CD980119EBCD96AB | |
:20012000014FD12601D5061F7CFE02201505057BE60320163E64CD980120107BE603280B59 | |
:20014000180887878784E60820010579CD9301804F1E6DCDAB01D124BC30CA79904FAF9162 | |
:2001600067247CFE01FCD001FA8001162F14D60A30FBF57AFE3020023E20CDD201F1C63A1F | |
:20018000CDD2017CB82841116101D581CD93012837183D5F16003E07E5677B5C21FFFF2325 | |
:2001A0009330FC15F29F0183EBE1C9E5C5210000541A13D630380C444D292909294F0600C1 | |
:1F01C0000918EEEB7BC1E1C93E0DCDD2013E0A113E20F5E5C50E025FCD0500C1E1F1C962 | |
:00000001FF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
BDOS EQU 0005H ; BDOS 番地 | |
CONOUT EQU 2 ; コンソール出力 | |
ARG1 EQU 005DH ; FCB+1 | |
ARG2 EQU 006DH ; FCB2+1 | |
CR EQU 0DH ; 復帰 | |
LF EQU 0AH ; 改行 | |
IF 1 ; Z80有効 | |
Z80 EQU 1 | |
ELSE | |
I8080 EQU 1 | |
ENDIF | |
.8080 | |
ASEG | |
ORG 100H | |
MAIN: | |
; DEに'年'取得 | |
MVI E,ARG1 ; コマンドプロンプトの第1引数 | |
CALL GETNUM ; 数値を読み込み | |
PUSH D ; | |
; (年+(年-1)/4-(年-1)/100+(年-1)/400) MOD 7 | |
; →その年の最初の曜日をCに格納する | |
MOV L,E ;HLに年 | |
MOV H,D ;DEに(年-1) | |
DCX D ; | |
MVI A,4 ; 4で割り | |
CALL DIV ; | |
DAD D ; HLに加える | |
MVI A,25 ; '4で割った値'を25で割り | |
CALL DIV ; | |
IFDEF I8080 | |
MOV A,L ; HLから引く | |
SUB E ; | |
MOV L,A ; | |
MOV A,H ; | |
SBB D ; | |
MOV H,A ; | |
ELSE | |
.Z80 | |
OR A ; HLから引く | |
SBC HL,DE ; | |
.8080 | |
ENDIF | |
MVI A,4 ; ''4で割った値'を25で割った値'を4で割り | |
CALL DIV ; | |
DAD D ; HLに加える | |
XCHG ; 7で割った剰余をCに代入 | |
CALL DIV7 ; | |
MOV C,A ; | |
POP D ; | |
; 1月から入力された月までの月ごとの日数を求めBに代入する | |
MVI H,1 ; | |
LOOP1: PUSH D ; | |
MVI B,31 ; 月の日数は基本31日 | |
MOV A,H | |
CPI 2 ; 2月でないなら | |
IFDEF I8080 | |
JNZ SKIP1 ; 31日ある月(1月. 3月, 5月, 7月, 8月, 10月, 12月)判定へ | |
ELSE | |
.Z80 | |
JR NZ, SKIP1 ; 31日ある月(1月. 3月, 5月, 7月, 8月, 10月, 12月)判定へ | |
.8080 | |
ENDIF | |
; 2月の日数判定 | |
DCR B ; とりあえず2日減らす | |
DCR B ; (うるう年でなければあとで更に1日減らす) | |
MOV A,E ; 4で割り切れないならうるう年でないので1日減らす | |
ANI 03H ; | |
IFDEF I8080 | |
JNZ SKIP2 ; | |
ELSE | |
.Z80 | |
JR NZ, SKIP2 ; | |
.8080 | |
ENDIF | |
MVI A,100 ; 4で割り切れて | |
CALL DIV ; 100で割り切れないならうるう年なので判定終了 | |
IFDEF I8080 | |
JNZ SKIP3 ; | |
ELSE | |
.Z80 | |
JR NZ, SKIP3 ; | |
.8080 | |
ENDIF | |
MOV A,E ; 4で割り切れて | |
ANI 03H ; 100で割り切れて | |
IFDEF I8080 | |
JZ SKIP3 ; 400で割り切れるならうるう年なので判定終了 | |
JMP SKIP2 ; 4で割り切れて | |
; 100で割り切れて | |
; 400で割り切れないならうるう年でないので1日減らす | |
ELSE | |
.Z80 | |
JR Z, SKIP3 ; 400で割り切れるならうるう年なので判定終了 | |
JR SKIP2 ; 4で割り切れて | |
; 100で割り切れて | |
; 400で割り切れないならうるう年でないので1日減らす | |
.8080 | |
ENDIF | |
; 31日ある月(1月. 3月, 5月, 7月, 8月, 10月, 12月)か判定 | |
SKIP1: ADD A ; 月を9倍しbit3が立っていれば31日ある月なので | |
ADD A ; 1日減らす処理をスキップする | |
ADD A ; | |
ADD H ; | |
ANI 08H ; | |
IFDEF I8080 | |
JNZ SKIP3 ; | |
ELSE | |
.Z80 | |
JR NZ, SKIP3 ; | |
.8080 | |
ENDIF | |
SKIP2: DCR B ; 1日減らす | |
; 先に求めたCに加えその次の月の最初の曜日を求める | |
SKIP3: MOV A,C ; Cの値を7で割った余りを | |
CALL MOD7 ; | |
ADD B ; その月の日数を加え | |
MOV C,A ; Cに格納する | |
; 入力された'月'まで繰り返し | |
MVI E,ARG2 ; コマンドプロンプトの第2引数 | |
CALL GETNUM ; 数値を読み込み | |
POP D | |
INR H | |
CMP H | |
IFDEF I8080 | |
JNC LOOP1 | |
ELSE | |
.Z80 | |
JR NC, LOOP1 | |
.8080 | |
ENDIF | |
; 先にも求めた'その次の月の最初の曜日'から最後の月の日数を引き、 | |
; その月の最初の曜日をCに代入する | |
MOV A,C | |
SUB B | |
MOV C,A | |
; カレンダーの最初の日曜日の日付(0未満だと先月)を求めHに代入 | |
XRA A ; Hに 0-'その月の最初の曜日'+1 を代入 | |
SUB C ; | |
MOV H,A ; | |
LOOP2: INR H ; | |
MOV A,H ; 1未満なら空白を出力 | |
CPI 1 ; | |
CM PUTSPC ; 空白を出力 | |
JM SKIP6 ; | |
; 日付の10の位出力 | |
MVI D,'0'-1 ; Dに出力する数字の初期値を代入し | |
LOOP3: INR D ; 10を引けた数だけインクリメントする | |
SUI 10 ; | |
IFDEF I8080 | |
JNC LOOP3 ; | |
ELSE | |
.Z80 | |
JR NC, LOOP3 ; | |
.8080 | |
ENDIF | |
PUSH PSW | |
MOV A,D ; '0'だったらゼロサプレスの為に数字の代わりに空白を出力 | |
CPI '0' ; | |
IFDEF I8080 | |
JNZ SKIP4 ; | |
ELSE | |
.Z80 | |
JR NZ, SKIP4 ; | |
.8080 | |
ENDIF | |
MVI A,' ' ; | |
SKIP4: CALL PUTC ; 数字か空白を出力 | |
POP PSW ; | |
; 日付の1の位出力 | |
ADI '0'+10 ; 数値→文字化(10引かれてるので+10) | |
SKIP6: CALL PUTC ; 空白か数字を出力 | |
MOV A,H ; 日付がその月の日数に達すれば改行して終了 | |
CMP B ; | |
IFDEF I8080 | |
JZ PUTCRLF ; スタックに積まれてない状態でPUTCRLFにジャンプするので | |
ELSE | |
.Z80 | |
JR Z, PUTCRLF ; スタックに積まれてない状態でPUTCRLFにジャンプするので | |
.8080 | |
ENDIF | |
; PUTCRLFの最後のRETでCCPに復帰する | |
LXI D,LOOP2 ; ループアドレスをスタックに積む | |
PUSH D ; | |
ADD C ; (日付+'その月の最初の曜日')/7 を計算し | |
CALL MOD7 ; 剰余がなければ土曜日なので改行してループ | |
IFDEF I8080 | |
JZ PUTCRLF ; | |
JMP PUTSPC ; 土曜日以外なので空白を出力しループ | |
ELSE | |
.Z80 | |
JR Z, PUTCRLF ; | |
JR PUTSPC ; 土曜日以外なので空白を出力しループ | |
.8080 | |
ENDIF | |
;--------------------------------------- | |
; 7で除算 | |
; 入力: A: 被除数 | |
; 出力: DE: 商 | |
; : A: 剰余 | |
; : Z: 剰余なしでセット | |
;--------------------------------------- | |
MOD7: MOV E,A | |
MVI D,0 | |
;--------------------------------------- | |
; 7で除算 | |
; 入力: DE: 被除数 | |
; 出力: DE: 商 | |
; : A: 剰余 | |
; : Z: 剰余なしでセット | |
;--------------------------------------- | |
DIV7: MVI A,7 | |
;--------------------------------------- | |
; 除算 | |
; 入力: DE: 被除数 | |
; : A: 除数 | |
; 出力: DE: 商 | |
; : A: 剰余 | |
; : Z: 剰余なしでセット | |
; 備考: A: 除数に0を指定すると無限ループする | |
;--------------------------------------- | |
DIV: PUSH H | |
MOV H,A ; 除数をHに退避 | |
MOV A,E ; 被除数下位をAに代入 | |
MOV E,H ; 除数をEに代入 | |
LXI H,-1 ; '引けた回数'初期化 | |
DIV1: INX H ; '引けた回数'インクリメント | |
SUB E ; 被除数下位から除数を引いてみる | |
IFDEF I8080 | |
JNC DIV1 ; ボローなければ被除数上位からの借りはないので繰り返し | |
ELSE | |
.Z80 | |
JR NC, DIV1 ; ボローなければ被除数上位からの借りはないので繰り返し | |
.8080 | |
ENDIF | |
DCR D ; 被除数上位からボロー分を引く | |
JP DIV1 ; 被除数上位が負になるまで繰り返し | |
ADD E ; 剰余 | |
XCHG ; DEに'引けた回数'代入 | |
POP H | |
RET | |
;--------------------------------------- | |
; 数値読み込み | |
; 入力: E: 文字列アドレス(上位は0固定) | |
; 出力: DE: 数値 | |
; : A: 数値の下位バイト | |
;--------------------------------------- | |
GETNUM: PUSH H | |
PUSH B | |
LXI H,0 ; 数値をクリア | |
MOV D,H | |
GETNUM1:LDAX D ; 文字列アドレスから1文字読み込み | |
INX D ; | |
SUI '0' ; '0'未満なら文字列終了 | |
IFDEF I8080 | |
JC GETNUM2 ; | |
ELSE | |
.Z80 | |
JR C, GETNUM2 | |
.8080 | |
ENDIF | |
;実際コマンドパラメータがターミネートされるのは空白(20H)かNUL(00H)のみ | |
;なので下2行削除 | |
; CPI 10 ; '0'+10以上でも終了 | |
IFDEF I8080 | |
; JNC GETNUM2 ; | |
ELSE | |
.Z80 | |
; JR NC, GETNUM2 ; | |
.8080 | |
ENDIF | |
MOV B,H ; 数値を10倍する | |
MOV C,L ; | |
DAD H ; x2 | |
DAD H ; x4 | |
DAD B ; x5 | |
DAD H ; x10 | |
MOV C,A ; 数値に文字列から読んだ値を加える | |
MVI B,0 ; | |
DAD B ; | |
IFDEF I8080 | |
JMP GETNUM1 ; 繰り返し | |
ELSE | |
.Z80 | |
JR GETNUM1 ; 繰り返し | |
.8080 | |
ENDIF | |
GETNUM2:XCHG ; DEに求めた数値を代入 | |
MOV A,E ; Aに求めた数値の下位バイトを代入 | |
POP B | |
POP H | |
RET | |
;--------------------------------------- | |
; 改行出力 | |
; 破壊: A: LFが代入される | |
; : DE | |
;--------------------------------------- | |
PUTCRLF:MVI A,CR | |
CALL PUTC | |
MVI A,LF | |
DB 11H ; LXI D,mm(2バイトスキップ) | |
;--------------------------------------- | |
; 空白出力 | |
; 破壊: A: ' 'が代入される | |
; : DE | |
;--------------------------------------- | |
PUTSPC: MVI A,' ' | |
;--------------------------------------- | |
; 1文字出力 | |
; 入力: A: 出力文字 | |
; 破壊: DE | |
;--------------------------------------- | |
PUTC: PUSH PSW | |
PUSH H | |
PUSH B | |
MVI C,CONOUT | |
MOV E,A | |
CALL BDOS | |
POP B | |
POP H | |
POP PSW | |
RET | |
END |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
MACRO-80 3.44 09-Dec-81 PAGE 1 | |
0005 BDOS EQU 0005H ; BDOS HVCO | |
0002 CONOUT EQU 2 ; %3%s%=!<%k=PNO | |
005D ARG1 EQU 005DH ; FCB+1 | |
006D ARG2 EQU 006DH ; FCB2+1 | |
000D CR EQU 0DH ; I|5" | |
000A LF EQU 0AH ; 2~9T | |
IF 1 ; Z80M-8z | |
0001 Z80 EQU 1 | |
ELSE | |
I8080 EQU 1 | |
ENDIF | |
.8080 | |
0000' ASEG | |
ORG 100H | |
0100 MAIN: | |
; DE$K'G/'<hF@ | |
0100 1E 5D MVI E,ARG1 ; %3%^%s%I%W%m%s%W%H$NBh10z?t | |
0102 CD 01AB CALL GETNUM ; ?tCM$rFI$_9~$_ | |
0105 D5 PUSH D ; | |
; (G/+(G/-1)/4-(G/-1)/100+(G/-1)/400) MOD 7 | |
; "*$=$NG/$N:G=i$NMKF|$rC$K3JG<$9$k | |
0106 6B MOV L,E ;HL$KG/ | |
0107 62 MOV H,D ;DE$K(G/-1) | |
0108 1B DCX D ; | |
0109 3E 04 MVI A,4 ; 4$G3d$j | |
010B CD 0198 CALL DIV ; | |
010E 19 DAD D ; HL$K2C$($k | |
010F 3E 19 MVI A,25 ; '4$G3d$C$?CM'$r25$G3d$j | |
0111 CD 0198 CALL DIV ; | |
IFDEF I8080 | |
MOV A,L ; HL$+$i0z$/ | |
SUB E ; | |
MOV L,A ; | |
MOV A,H ; | |
SBB D ; | |
MOV H,A ; | |
ELSE | |
.Z80 | |
0114 B7 OR A ; HL$+$i0z$/ | |
0115 ED 52 SBC HL,DE ; | |
.8080 | |
ENDIF | |
0117 3E 04 MVI A,4 ; ''4$G3d$C$?CM'$r25$G3d$C$?CM'$r4$G3d$j | |
0119 CD 0198 CALL DIV ; | |
011C 19 DAD D ; HL$K2C$($k | |
011D EB XCHG ; 7$G3d$C$?>jM>$rC$KBeF~ | |
011E CD 0196 CALL DIV7 ; | |
0121 4F MOV C,A ; | |
0122 D1 POP D ; | |
; 17n$+$iF~NO$5$l$?7n$^$G$N7n$4$H$NF|?t$r5a$aB$KBeF~$9$k | |
MACRO-80 3.44 09-Dec-81 PAGE 1-1 | |
0123 26 01 MVI H,1 ; | |
0125 D5 LOOP1: PUSH D ; | |
0126 06 1F MVI B,31 ; 7n$NF|?t$O4pK\31F| | |
0128 7C MOV A,H | |
0129 FE 02 CPI 2 ; 27n$G$J$$$J$i | |
IFDEF I8080 | |
JNZ SKIP1 ; 31F|$"$k7n(17n. 37n, 57n, 77n, 87n, 107n, 127n)H=Dj$X | |
ELSE | |
.Z80 | |
012B 20 15 JR NZ, SKIP1 ; 31F|$"$k7n(17n. 37n, 57n, 77n, 87n, 107n, 127n)H=Dj$X | |
.8080 | |
ENDIF | |
; 27n$NF|?tH=Dj | |
012D 05 DCR B ; $H$j$"$($:2F|8:$i$9 | |
012E 05 DCR B ; ($&$k$&G/$G$J$1$l$P$"$H$G99$K1F|8:$i$9) | |
012F 7B MOV A,E ; 4$G3d$j@Z$l$J$$$J$i$&$k$&G/$G$J$$$N$G1F|8:$i$9 | |
0130 E6 03 ANI 03H ; | |
IFDEF I8080 | |
JNZ SKIP2 ; | |
ELSE | |
.Z80 | |
0132 20 16 JR NZ, SKIP2 ; | |
.8080 | |
ENDIF | |
0134 3E 64 MVI A,100 ; 4$G3d$j@Z$l$F | |
0136 CD 0198 CALL DIV ; 100$G3d$j@Z$l$J$$$J$i$&$k$&G/$J$N$GH=Dj=*N; | |
IFDEF I8080 | |
JNZ SKIP3 ; | |
ELSE | |
.Z80 | |
0139 20 10 JR NZ, SKIP3 ; | |
.8080 | |
ENDIF | |
013B 7B MOV A,E ; 4$G3d$j@Z$l$F | |
013C E6 03 ANI 03H ; 100$G3d$j@Z$l$F | |
IFDEF I8080 | |
JZ SKIP3 ; 400$G3d$j@Z$l$k$J$i$&$k$&G/$J$N$GH=Dj=*N; | |
JMP SKIP2 ; 4$G3d$j@Z$l$F | |
; 100$G3d$j@Z$l$F | |
; 400$G3d$j@Z$l$J$$$J$i$&$k$&G/$G$J$$$N$G1F|8:$i$9 | |
ELSE | |
.Z80 | |
013E 28 0B JR Z, SKIP3 ; 400$G3d$j@Z$l$k$J$i$&$k$&G/$J$N$GH=Dj=*N; | |
0140 18 08 JR SKIP2 ; 4$G3d$j@Z$l$F | |
; 100$G3d$j@Z$l$F | |
; 400$G3d$j@Z$l$J$$$J$i$&$k$&G/$G$J$$$N$G1F|8:$i$9 | |
.8080 | |
ENDIF | |
; 31F|$"$k7n(17n. 37n, 57n, 77n, 87n, 107n, 127n)$+H=Dj | |
0142 87 SKIP1: ADD A ; 7n$r9G\$7bit3$,N)$C$F$$$l$P31F|$"$k7n$J$N$G | |
MACRO-80 3.44 09-Dec-81 PAGE 1-2 | |
0143 87 ADD A ; 1F|8:$i$9=hM}$r%9%-%C%W$9$k | |
0144 87 ADD A ; | |
0145 84 ADD H ; | |
0146 E6 08 ANI 08H ; | |
IFDEF I8080 | |
JNZ SKIP3 ; | |
ELSE | |
.Z80 | |
0148 20 01 JR NZ, SKIP3 ; | |
.8080 | |
ENDIF | |
014A 05 SKIP2: DCR B ; 1F|8:$i$9 | |
; @h$K5a$a$?C$K2C$($=$N<!$N7n$N:G=i$NMKF|$r5a$a$k | |
014B 79 SKIP3: MOV A,C ; C$NCM$r7$G3d$C$?M>$j$r | |
014C CD 0193 CALL MOD7 ; | |
014F 80 ADD B ; $=$N7n$NF|?t$r2C$( | |
0150 4F MOV C,A ; C$K3JG<$9$k | |
; F~NO$5$l$?'7n'$^$G7+$jJV$7 | |
0151 1E 6D MVI E,ARG2 ; %3%^%s%I%W%m%s%W%H$NBh20z?t | |
0153 CD 01AB CALL GETNUM ; ?tCM$rFI$_9~$_ | |
0156 D1 POP D | |
0157 24 INR H | |
0158 BC CMP H | |
IFDEF I8080 | |
JNC LOOP1 | |
ELSE | |
.Z80 | |
0159 30 CA JR NC, LOOP1 | |
.8080 | |
ENDIF | |
; @h$K$b5a$a$?'$=$N<!$N7n$N:G=i$NMKF|'$+$i:G8e$N7n$NF|?t$r0z$-!" | |
; $=$N7n$N:G=i$NMKF|$rC$KBeF~$9$k | |
015B 79 MOV A,C | |
015C 90 SUB B | |
015D 4F MOV C,A | |
; %+%l%s%@!<$N:G=i$NF|MKF|$NF|IU(0L$K~$@$H@h7n)$r5a$aH$KBeF~ | |
015E AF XRA A ; H$K 0-'$=$N7n$N:G=i$NMKF|'+1 $rBeF~ | |
015F 91 SUB C ; | |
0160 67 MOV H,A ; | |
0161 24 LOOP2: INR H ; | |
0162 7C MOV A,H ; 1L$K~$J$i6uGr$r=PNO | |
0163 FE 01 CPI 1 ; | |
0165 FC 01D0 CM PUTSPC ; 6uGr$r=PNO | |
0168 FA 0180 JM SKIP6 ; | |
; F|IU$N10$N0L=PNO | |
016B 16 2F MVI D,'0'-1 ; D$K=PNO$9$k?t;z$N=i4|CM$rBeF~$7 | |
016D 14 LOOP3: INR D ; 10$r0z$1$??t$@$1%$%s%/%j%a%s%H$9$k | |
016E D6 0A SUI 10 ; | |
IFDEF I8080 | |
JNC LOOP3 ; | |
MACRO-80 3.44 09-Dec-81 PAGE 1-3 | |
ELSE | |
.Z80 | |
0170 30 FB JR NC, LOOP3 ; | |
.8080 | |
ENDIF | |
0172 F5 PUSH PSW | |
0173 7A MOV A,D ; '0'$@$C$?$i%<%m%5%W%l%9$N0Y$K?t;z$NBe$o$j$K6uGr$r=PNO | |
0174 FE 30 CPI '0' ; | |
IFDEF I8080 | |
JNZ SKIP4 ; | |
ELSE | |
.Z80 | |
0176 20 02 JR NZ, SKIP4 ; | |
.8080 | |
ENDIF | |
0178 3E 20 MVI A,' ' ; | |
017A CD 01D2 SKIP4: CALL PUTC ; ?t;z$+6uGr$r=PNO | |
017D F1 POP PSW ; | |
; F|IU$N1$N0L=PNO | |
017E C6 3A ADI '0'+10 ; ?tCM"*J8;z2=(100z$+$l$F$k$N$G+10) | |
0180 CD 01D2 SKIP6: CALL PUTC ; 6uGr$+?t;z$r=PNO | |
0183 7C MOV A,H ; F|IU$,$=$N7n$NF|?t$KC#$9$l$P2~9T$7$F=*N; | |
0184 B8 CMP B ; | |
IFDEF I8080 | |
JZ PUTCRLF ; %9%?%C%/$K@Q$^$l$F$J$$>uBV$GPUTCRLF$K%8%c%s%W$9$k$N$G | |
ELSE | |
.Z80 | |
0185 28 41 JR Z, PUTCRLF ; %9%?%C%/$K@Q$^$l$F$J$$>uBV$GPUTCRLF$K%8%c%s%W$9$k$N$G | |
.8080 | |
ENDIF | |
; PUTCRLF$N:G8e$NRET$GCCP$KI|5"$9$k | |
0187 11 0161 LXI D,LOOP2 ; %k!<%W%"%I%l%9$r%9%?%C%/$K@Q$` | |
018A D5 PUSH D ; | |
018B 81 ADD C ; (F|IU+'$=$N7n$N:G=i$NMKF|')/7 $r7W;;$7 | |
018C CD 0193 CALL MOD7 ; >jM>$,$J$1$l$PEZMKF|$J$N$G2~9T$7$F%k!<%W | |
IFDEF I8080 | |
JZ PUTCRLF ; | |
JMP PUTSPC ; EZMKF|0J30$J$N$G6uGr$r=PNO$7%k!<%W | |
ELSE | |
.Z80 | |
018F 28 37 JR Z, PUTCRLF ; | |
0191 18 3D JR PUTSPC ; EZMKF|0J30$J$N$G6uGr$r=PNO$7%k!<%W | |
.8080 | |
ENDIF | |
;--------------------------------------- | |
; 7$G=|;; | |
; F~NO: A: Ho=|?t | |
; =PNO: DE: >& | |
; !!!!: A: >jM> | |
; !!!!: Z: >jM>$J$7$G%;%C%H | |
;--------------------------------------- | |
0193 5F MOD7: MOV E,A | |
0194 16 00 MVI D,0 | |
MACRO-80 3.44 09-Dec-81 PAGE 1-4 | |
;--------------------------------------- | |
; 7$G=|;; | |
; F~NO: DE: Ho=|?t | |
; =PNO: DE: >& | |
; !!!!: A: >jM> | |
; !!!!: Z: >jM>$J$7$G%;%C%H | |
;--------------------------------------- | |
0196 3E 07 DIV7: MVI A,7 | |
;--------------------------------------- | |
; =|;; | |
; F~NO: DE: Ho=|?t | |
; !!!!: A: =|?t | |
; =PNO: DE: >& | |
; !!!!: A: >jM> | |
; !!!!: Z: >jM>$J$7$G%;%C%H | |
; Hw9M: A: =|?t$K0$r;XDj$9$k$HL58B%k!<%W$9$k | |
;--------------------------------------- | |
0198 E5 DIV: PUSH H | |
0199 67 MOV H,A ; =|?t$rH$KB`Hr | |
019A 7B MOV A,E ; Ho=|?t2<0L$rA$KBeF~ | |
019B 5C MOV E,H ; =|?t$rE$KBeF~ | |
019C 21 FFFF LXI H,-1 ; '0z$1$?2s?t'=i4|2= | |
019F 23 DIV1: INX H ; '0z$1$?2s?t'%$%s%/%j%a%s%H | |
01A0 93 SUB E ; Ho=|?t2<0L$+$i=|?t$r0z$$$F$_$k | |
IFDEF I8080 | |
JNC DIV1 ; %\%m!<$J$1$l$PHo=|?t>e0L$+$i$N<Z$j$O$J$$$N$G7+$jJV$7 | |
ELSE | |
.Z80 | |
01A1 30 FC JR NC, DIV1 ; %\%m!<$J$1$l$PHo=|?t>e0L$+$i$N<Z$j$O$J$$$N$G7+$jJV$7 | |
.8080 | |
ENDIF | |
01A3 15 DCR D ; Ho=|?t>e0L$+$i%\%m!<J,$r0z$/ | |
01A4 F2 019F JP DIV1 ; Ho=|?t>e0L$,Ii$K$J$k$^$G7+$jJV$7 | |
01A7 83 ADD E ; >jM> | |
01A8 EB XCHG ; DE$K'0z$1$?2s?t'BeF~ | |
01A9 E1 POP H | |
01AA C9 RET | |
;--------------------------------------- | |
; ?tCMFI$_9~$_ | |
; F~NO: E: J8;zNs%"%I%l%9(>e0L$O08GDj) | |
; =PNO: DE: ?tCM | |
; !!!!: A: ?tCM$N2<0L%P%$%H | |
;--------------------------------------- | |
01AB E5 GETNUM: PUSH H | |
01AC C5 PUSH B | |
01AD 21 0000 LXI H,0 ; ?tCM$r%/%j%" | |
01B0 54 MOV D,H | |
01B1 1A GETNUM1:LDAX D ; J8;zNs%"%I%l%9$+$i1J8;zFI$_9~$_ | |
01B2 13 INX D ; | |
01B3 D6 30 SUI '0' ; '0'L$K~$J$iJ8;zNs=*N; | |
IFDEF I8080 | |
JC GETNUM2 ; | |
ELSE | |
.Z80 | |
MACRO-80 3.44 09-Dec-81 PAGE 1-5 | |
01B5 38 0C JR C, GETNUM2 | |
.8080 | |
ENDIF | |
;<B:]%3%^%s%I%Q%i%a!<%?$,%?!<%_%M!<%H$5$l$k$N$O6uGr(20H)$+NUL(00H)$N$_ | |
;$J$N$G2<29T:o=| | |
; CPI 10 ; '0'+100J>e$G$b=*N; | |
IFDEF I8080 | |
; JNC GETNUM2 ; | |
ELSE | |
.Z80 | |
; JR NC, GETNUM2 ; | |
.8080 | |
ENDIF | |
01B7 44 MOV B,H ; ?tCM$r10G\$9$k | |
01B8 4D MOV C,L ; | |
01B9 29 DAD H ; x2 | |
01BA 29 DAD H ; x4 | |
01BB 09 DAD B ; x5 | |
01BC 29 DAD H ; x10 | |
01BD 4F MOV C,A ; ?tCM$KJ8;zNs$+$iFI$s$@CM$r2C$($k | |
01BE 06 00 MVI B,0 ; | |
01C0 09 DAD B ; | |
IFDEF I8080 | |
JMP GETNUM1 ; 7+$jJV$7 | |
ELSE | |
.Z80 | |
01C1 18 EE JR GETNUM1 ; 7+$jJV$7 | |
.8080 | |
ENDIF | |
01C3 EB GETNUM2:XCHG ; DE$K5a$a$??tCM$rBeF~ | |
01C4 7B MOV A,E ; A$K5a$a$??tCM$N2<0L%P%$%H$rBeF~ | |
01C5 C1 POP B | |
01C6 E1 POP H | |
01C7 C9 RET | |
;--------------------------------------- | |
; 2~9T=PNO | |
; GK2u: A: LF$,BeF~$5$l$k | |
; !!!!: DE | |
;--------------------------------------- | |
01C8 3E 0D PUTCRLF:MVI A,CR | |
01CA CD 01D2 CALL PUTC | |
01CD 3E 0A MVI A,LF | |
01CF 11 DB 11H ; LXI D,mm(2%P%$%H%9%-%C%W) | |
;--------------------------------------- | |
; 6uGr=PNO | |
; GK2u: A: ' '$,BeF~$5$l$k | |
; !!!!: DE | |
;--------------------------------------- | |
01D0 3E 20 PUTSPC: MVI A,' ' | |
;--------------------------------------- | |
; 1J8;z=PNO | |
; F~NO: A: =PNOJ8;z | |
; GK2u: DE | |
MACRO-80 3.44 09-Dec-81 PAGE 1-6 | |
;--------------------------------------- | |
01D2 F5 PUTC: PUSH PSW | |
01D3 E5 PUSH H | |
01D4 C5 PUSH B | |
01D5 0E 02 MVI C,CONOUT | |
01D7 5F MOV E,A | |
01D8 CD 0005 CALL BDOS | |
01DB C1 POP B | |
01DC E1 POP H | |
01DD F1 POP PSW | |
01DE C9 RET | |
END | |
MACRO-80 3.44 09-Dec-81 PAGE S | |
Macros: | |
Symbols: | |
005D ARG1 006D ARG2 0005 BDOS | |
0002 CONOUT 000D CR 0198 DIV | |
019F DIV1 0196 DIV7 01AB GETNUM | |
01B1 GETNUM1 01C3 GETNUM2 000A LF | |
0125 LOOP1 0161 LOOP2 016D LOOP3 | |
0100 MAIN 0193 MOD7 01D2 PUTC | |
01C8 PUTCRLF 01D0 PUTSPC 0142 SKIP1 | |
014A SKIP2 014B SKIP3 017A SKIP4 | |
0180 SKIP6 0001 Z80 | |
No Fatal error(s) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment