Skip to content

Instantly share code, notes, and snippets.

@fujitanozomu
Last active August 29, 2015 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fujitanozomu/b81f78040fdd8f91e70b to your computer and use it in GitHub Desktop.
Save fujitanozomu/b81f78040fdd8f91e70b to your computer and use it in GitHub Desktop.
「プロ生ちゃん #カレンダープログラミング プチコンテスト 2014」ではない
:200100001E5DCDAB01D56B621B3E04CD9801193E19CD9801B7ED523E04CD980119EBCD96AB
:20012000014FD12601D5061F7CFE02201505057BE60320163E64CD980120107BE603280B59
:20014000180887878784E60820010579CD9301804F1E6DCDAB01D124BC30CA79904FAF9162
:2001600067247CFE01FCD001FA8001162F14D60A30FBF57AFE3020023E20CDD201F1C63A1F
:20018000CDD2017CB82841116101D581CD93012837183D5F16003E07E5677B5C21FFFF2325
:2001A0009330FC15F29F0183EBE1C9E5C5210000541A13D630380C444D292909294F0600C1
:1F01C0000918EEEB7BC1E1C93E0DCDD2013E0A113E20F5E5C50E025FCD0500C1E1F1C962
:00000001FF
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
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