1: / bj -- black jack 2: 3: .globl _signal 4: mov $prtot, -(sp) 5: mov $2,-(sp) 6: jsr pc,_signal 7: cmp (sp)+,(sp)+ 8: jsr r5,mesg; <Black Jack\n\0>; .even 9: mov sp,gsp 10: clr r0 11: 1: 12: movb r0,deck(r0) 13: inc r0 14: cmp r0,$52. 15: blo 1b 16: 17: game: 18: mov gsp,sp 19: jsr r5,mesg; <new game\n\0>; .even 20: clr dbjf 21: add taction,action 22: clr taction 23: jsr pc,shuffle 24: jsr r5,quest5 25: mov total,stotal 26: jsr pc,card 27: mov cval,upval 28: mov aceflg,upace 29: jsr pc,peek 30: mov r0,dhole 31: mov cval,r0 32: add upval,r0 33: cmp r0,$21. 34: bne 1f 35: inc dbjf 36: 1: 37: jsr r5,mesg; < up\n\0>; .even 38: jsr pc,card 39: mov cval,ival 40: mov aceflg,iace 41: mov $'+,r0 42: jsr pc,putc 43: mov $-1,-(sp) 44: mov $-1,-(sp) / safety 45: clr dflag 46: br 1f 47: 48: doubl: 49: cmp dflag,$1 50: beq 2f 51: jmp dmove 52: 2: 53: inc dflag 54: 1: 55: mov ival,value 56: mov iace,naces 57: mov $1,fcard 58: mov bet,-(sp) 59: 60: hit: 61: jsr pc,card 62: jsr pc,nline 63: jsr pc,nline 64: add cval,value 65: add aceflg,naces 66: dec fcard 67: bge 2f 68: jmp 1f 69: 2: 70: add bet,taction 71: tst dflag 72: bne 2f 73: tst upace 74: beq 2f 75: jsr r5,mesg; <Insurance? \0>; .even 76: jsr r5,quest1 77: br 2f 78: mov bet,r0 79: add r0,total 80: asr r0 81: add r0,taction 82: tst dbjf 83: bne 2f 84: sub r0,total 85: asl r0 86: sub r0,total 87: 2: 88: tst dflag 89: beq 2f 90: cmp ival,$11. 91: beq 3f 92: 2: 93: cmp value,$21. 94: bne 2f 95: tst dflag 96: bne 2f 97: jsr r5,mesg; <You have black jack!\n\0>; .even 98: tst (sp)+ 99: tst dbjf 100: bne doubl 101: mov bet,r0 102: add r0,total 103: asr r0 104: add r0,total 105: br doubl 106: 2: 107: tst dbjf 108: bne 3f 109: cmp cval,ival 110: bne 2f 111: tst dflag 112: bne 2f 113: jsr r5,mesg; <Split pair? \0>; .even 114: jsr r5,quest2 115: br 2f 116: inc dflag 117: tst (sp)+ 118: br 1b 119: 2: 120: cmp value,$10. 121: blo 1f 122: cmp value,$11. 123: bhi 1f 124: jsr r5,mesg; <Double down? \0>; .even 125: jsr r5,quest3 126: br 1f 127: add (sp),(sp) / double bet 128: add bet,taction 129: jsr pc,card 130: jsr pc,nline 131: add cval,value 132: 3: 133: cmp value,$21. 134: blos stick 135: sub $10.,value 136: br stick 137: 1: 138: cmp value,$21. 139: blos 1f 140: dec naces 141: bge 2f 142: jsr r5,mesg; <You bust\n\0> 143: sub (sp)+,total 144: jmp doubl 145: 2: 146: sub $10.,value 147: br 1b 148: 1: 149: jsr r5,mesg; <Hit? \0>; .even 150: jsr r5,quest4 151: br stick 152: jmp hit 153: 154: stick: 155: tst dbjf 156: bne 1f 157: jsr r5,mesg; <You have \0>; .even 158: mov value,r0 159: jsr pc,decml 160: jsr pc,nline 161: 1: 162: mov value,-(sp) 163: jmp doubl 164: 165: dmove: 166: tst (sp) 167: blt addin 168: jsr r5,mesg; <Dealer has \0>; .even 169: mov dhole,peekf 170: 171: dhit: 172: jsr pc,card 173: add cval,upval 174: add aceflg,upace 175: tst dbjf 176: beq 1f 177: jsr r5,mesg; < = blackjack\n\0>; .even 178: mov $22.,upval 179: br addin 180: 1: 181: cmp upval,$21. 182: blos 1f 183: dec upace 184: bge 2f 185: jsr r5,mesg; < = bust\n\0>; .even 186: clr upval 187: br addin 188: 2: 189: sub $10.,upval 190: br 1b 191: 1: 192: cmp upval,$17. 193: bhis 1f 194: mov $'+,r0 195: jsr pc,putc 196: br dhit 197: 1: 198: jsr r5,mesg;< = >; .even 199: mov upval,r0 200: jsr pc,decml 201: jsr pc,nline 202: 203: addin: 204: mov (sp)+,r0 205: blt 2f 206: cmp upval,r0 207: bne 1f 208: tst (sp)+ 209: br addin 210: 1: 211: blt 1f 212: sub (sp)+,total 213: br addin 214: 1: 215: add (sp)+,total 216: br addin 217: 2: 218: mov total,r0 219: sub stotal,r0 220: jsr pc,dollars 221: jmp game 222: 223: shuffle: 224: cmp mod,$15. 225: bhis 1f 226: jsr r5,mesg; <Shuffle\n\0>; .even 227: jsr pc,pract 228: mov $52.,mod 229: mov $16.,tens 230: mov $36.,others 231: 1: 232: rts pc 233: 234: card: 235: jsr pc,peek 236: mov cden,r0 237: jsr pc,putc 238: mov csuit,r0 239: jsr pc,putc 240: cmp cval,$10. 241: beq 1f 242: dec others 243: rts pc 244: 1: 245: dec tens 246: rts pc 247: 248: peek: 249: mov peekf,-(sp) 250: bne 1f 251: cmp mod,$1 252: bgt 2f 253: jsr pc,shuffle 254: 2: 255: jsr r5,rand; mod: 0 256: dec mod 257: movb deck(r0),(sp) 258: mov mod,r1 259: movb deck(r1),deck(r0) 260: movb (sp),deck(r1) 261: inc (sp) 262: 1: 263: clr peekf 264: mov (sp),r1 265: dec r1 266: clr r0 267: div $4.,r0 268: movb denom(r0),cden 269: movb suit(r1),csuit 270: clr aceflg 271: tst r0 272: bne 1f 273: inc aceflg 274: mov $11.,r0 275: br 2f 276: 1: 277: inc r0 278: cmp r0,$10. 279: blos 2f 280: mov $10.,r0 281: 2: 282: mov r0,cval 283: mov (sp)+,r0 284: rts pc 285: 286: prtot: 287: jsr pc,nline 288: jsr pc,pract 289: jmp done 290: 291: pract: 292: tst action 293: beq 1f 294: jsr r5,mesg; <Action $\0>; .even 295: mov action,r0 296: jsr pc,decml 297: mov total,r0 298: jsr pc,dollars 299: 1: 300: rts pc 301: 302: dollars: 303: mov r0,-(sp) 304: blt 1f 305: bne 2f 306: jsr r5,mesg; <\nYou break even\0>; .even 307: tst (sp)+ 308: br 3f 309: 2: 310: jsr r5,mesg; <\nYou win $\0>; .even 311: br 2f 312: 1: 313: jsr r5,mesg; <\nYou lose $\0>; .even 314: neg (sp) 315: 2: 316: mov (sp)+,r0 317: jsr pc,decml 318: 3: 319: jsr pc,nline 320: rts pc 321: 322: denom: <A23456789TJQK> 323: suit: <HSDC> 324: deck: .=.+52. 325: .even 326: 327: cval: .=.+2 328: aceflg: .=.+2 329: cden: .=.+2 330: csuit: .=.+2 331: peekf: .=.+2 332: dhole: .=.+2 333: dbjf: .=.+2 334: upval: .=.+2 335: upace: .=.+2 336: value: .=.+2 337: taction: .=.+2 338: action: .=.+2 339: naces: .=.+2 340: ival: .=.+2 341: iace: .=.+2 342: gsp: .=.+2 343: dflag: .=.+2 344: fcard: .=.+2 345: stotal: .=.+2 346: total: .=.+2