
/* ////////////////////////////////////////////////////////////////////////////
                                    main()
//////////////////////////////////////////////////////////////////////////// */

#if 0
char NewPSW(char PSW, char ACC) {               /* Compile these to create */
    return PSW + ACC;                           /*  templates for similar */
    }                                           /*  ASM functions */

char NewACC(char PSW, char ACC) {
    return PSW - ACC;
    }
#else
char NewPSW(char, char);                        /* Function prototypes for */
char NewACC(char, char);                        /*  functions written in ASM */
#endif

void main() {

    char         ACC,  PSW;
    int         iACC, iPSW;

    hw_init();                                  /* Go set up the hardware */
    printf("DA A test\n\n");                    /* Sign on */

    for (iPSW = 0x00; iPSW <= 0xC0; iPSW += 0x40)
    for (iACC = 0x00; iACC <= 0xFF; iACC += 0x01) {
        ACC = (char) iACC;
        PSW = (char) iPSW;

        printf("Old PSW: %02X, Old ACC: %02X, New PSW: %02X, New ACC: %02X\n",
            PSW, ACC, NewPSW(PSW, ACC), NewACC(PSW, ACC));

        }
    printf("\nTest complete\n");

    while (1) {                                 /* Spin here forever */
        }                                       /* End 'spin here forever' */
    }                                           /* End main() */

-----------------------------------------------------------------

          PUBLIC    NewACC
          PUBLIC    NewPSW

          RSEG      CODE

          IF 0

NewPSW:
          MOV       PSW,R7                  ; Get PSW
          MOV       R0,#$LOCBI NewPSW+1     ; Get address of ACC
          MOV       A,@R0                   ; Get ACC
          DA        A                       ; Do decimal adjust
          MOV       R7,PSW                  ; Return PSW in R7
          RET

NewACC:
          MOV       PSW,R7                  ; Get PSW
          MOV       R0,#$LOCBI NewPSW+1     ; Get address of ACC
          MOV       A,@R0                   ; Get ACC
          DA        A                       ; Do decimal adjust
          MOV       R7,A                    ; Return ACC in R7
          RET

          END
