mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2024-12-02 12:52:03 +00:00
16c1731e54
- bugfixes - implemented required library - commenting updates - .min of every routine
280 lines
8.0 KiB
Plaintext
280 lines
8.0 KiB
Plaintext
*
|
|
********************************
|
|
* *
|
|
* -< MATH DEMO >- *
|
|
* *
|
|
* VERSION 00.02.00 *
|
|
* *
|
|
* 12-DEC-2018 *
|
|
* *
|
|
********************************
|
|
* *
|
|
* NATHAN D. RIGGS *
|
|
* NATHAN.RIGGS@OUTLOOK.COM *
|
|
* *
|
|
********************************
|
|
*
|
|
** ASSEMBLER DIRECTIVES
|
|
*
|
|
CYC AVE
|
|
EXP ONLY
|
|
DSK MATH.DEMO
|
|
OBJ $BFE0
|
|
ORG $6000
|
|
*
|
|
*``````````````````````````````*
|
|
* TOP INCLUDES (HOOKS,MACROS) *
|
|
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
|
*
|
|
PUT MATH.HOOKS
|
|
USE MATH.MAC
|
|
PUT REQUIRED.HOOKS
|
|
USE REQUIRED.MAC
|
|
*
|
|
*``````````````````````````````*
|
|
* PROGRAM MAIN BODY *
|
|
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
|
*
|
|
JSR $FC58 ; HOME
|
|
_PRNT "INTEGER MATH LIBRARIES AND",8D
|
|
_PRNT "MACROS. ",8D
|
|
_PRNT "-------------------------",8D8D
|
|
_PRNT "THE RAND8 ROUTINE RETURNS",8D
|
|
_PRNT "A PSEUDO-RANDOM VALUE BETWEEN",8D
|
|
_PRNT "1 AND 255.",8D8D
|
|
JSR RAND8
|
|
STA $300
|
|
JSR RAND8
|
|
STA $301
|
|
JSR RAND8
|
|
STA $302
|
|
JSR RAND8
|
|
STA $303
|
|
JSR RAND8
|
|
STA $304
|
|
_DUMP $300;#5
|
|
_WAIT
|
|
*
|
|
_PRNT " ",8D8D
|
|
_PRNT "WHILE THE RNDB MACRO RETURNS",8D
|
|
_PRNT "A BYTE VALUE BETWEEN A GIVEN",8D
|
|
_PRNT "LOW AND HIGH VALUE.",8D8D
|
|
RNDB #$A0;#$AF
|
|
STA $300
|
|
RNDB #$A0;#$AF
|
|
STA $301
|
|
RNDB #$A0;#$AF
|
|
STA $302
|
|
RNDB #$A0;#$AF
|
|
STA $303
|
|
RNDB #$A0;#$AF
|
|
STA $304
|
|
_DUMP $300;#5
|
|
_WAIT
|
|
*
|
|
_PRNT " ",8D8D
|
|
_PRNT "THE MUL8 MACRO MULTIPLIES",8D
|
|
_PRNT "TWO UNSIGNED BYTES AND RETURNS",8D
|
|
_PRNT "A 16-BIT RESULT (WORD).",8D
|
|
_PRNT "NOTE THAT THIS RESULT IS STORED",8D
|
|
_PRNT "WITH THE LOW BYTE FIRST, THEN THE",8D
|
|
_PRNT "HIGH BYTE, AS PER 6502 CONVENTION.",8D8D
|
|
_PRNT ":: MUL8 #10;#10 RETURNS (L,H):",8D
|
|
LDA #10
|
|
STA $300
|
|
MUL8 #10;$300
|
|
_DUMP RETURN;#2
|
|
_WAIT
|
|
_PRNT " ",8D8D
|
|
_PRNT ":: MUL8 #100;#100 RETURNS (L,H):",8D
|
|
MUL8 #100;#100
|
|
_DUMP RETURN;#2
|
|
_PRNT " ",8D8D
|
|
_WAIT
|
|
*
|
|
_PRNT "THE DIV8 MACRO DIVIDES A ",8D
|
|
_PRNT "DIVIDEND BY A DIVISOR,"8D
|
|
_PRNT "RETURNING THE QUOTIENT.",8D
|
|
_PRNT "ALL VALUES ARE UNSIGNED.",8D8D
|
|
DIV8 #100;#10
|
|
_PRNT ":: DIV8 #100;#10 RETURNS:",8D8D
|
|
_DUMP RETURN;#1
|
|
_WAIT
|
|
_PRNT "::DIV8 #200;#33 RETURNS",8D8D
|
|
DIV8 #200;#33
|
|
STY $300 ; REMAINDER IN .Y
|
|
_DUMP RETURN;#1
|
|
_PRNT " ",8D8D
|
|
_PRNT "WITH A REMAINDER OF: ",8D
|
|
_DUMP $300;#1
|
|
_PRNT " ",8D8D
|
|
_WAIT
|
|
*
|
|
** THE FOLLOWING IS DONE JUST TO SHOW THAT
|
|
** THESE MACROS ACCEPT LITERAL VALUES AS WELL
|
|
** AS POINTERS
|
|
*
|
|
LDA #$D0 ; LOAD #2000 INTO $300
|
|
STA $300
|
|
LDA #$07
|
|
STA $301
|
|
LDA #$B8
|
|
STA $302
|
|
LDA #$0B
|
|
STA $303
|
|
ADD16 $300;#3000
|
|
_PRNT " ",8D8D
|
|
_PRNT "THE ADD16 MACRO ADDS TWO",8D
|
|
_PRNT "16-BIT VALUES, SIGNED OR UNSIGNED.",8D8D
|
|
_PRNT "ADD16 #3000;#2000 RETURNS: ",8D8D
|
|
_DUMP RETURN;RETLEN
|
|
_PRNT " ",8D8D
|
|
_WAIT
|
|
*
|
|
_PRNT " ",8D8D
|
|
_PRNT "THE SUB16 MACRO SUBTRACTS ONE",8D
|
|
_PRNT "16-BIT NUMBER FROM ANOTHER.",8D8D
|
|
_PRNT "CALCULATED LEFT TO RIGHT, L-R.",8D
|
|
_PRNT "SIGNED OR UNSIGNED.",8D8D
|
|
_PRNT "SUB16 #5000;#3000 RETURNS: ",8D8D
|
|
SUB16 #5000;#3000 ; 5000 - 3000
|
|
_DUMP RETURN;RETLEN
|
|
_PRNT " ",8D8D
|
|
_WAIT
|
|
*
|
|
_PRNT "THE MUL16 MACRO MULTIPLIES TWO",8D
|
|
_PRNT "16-BIT NUMBERS, SIGNED OR NOT.",8D8D
|
|
_PRNT "MUL16 #500;#500 RETURNS: ",8D8D
|
|
MUL16 #500;#500
|
|
_DUMP RETURN;RETLEN
|
|
_PRNT " ",8D8D
|
|
_WAIT
|
|
*
|
|
_PRNT "AND THE DIV16 MACRO DIVIDES THE",8D
|
|
_PRNT "FIRST PARAMETER BY THE SECOND.",8D8D
|
|
_PRNT "IF THE THIRD PARAMETER IS",8D
|
|
_PRNT "AN S, THEN THE DIVISION IS SIGNED;",8D
|
|
_PRNT "OTHERWISE, IT IS UNSIGNED.",8D8D
|
|
_PRNT "DIV16 #25000;#500;U RETURNS:",8D8D
|
|
DIV16 #25000;#500;U
|
|
_DUMP RETURN;RETLEN
|
|
_PRNT " ",8D8D
|
|
_WAIT
|
|
*
|
|
_PRNT "THE REM16 MACRO LIKEWISE CALCULATES",8D
|
|
_PRNT "THE REMAINDER OF A 16-BIT DIVISION.",8D
|
|
_PRNT "IT ALSO USES THE THIRD PARAMETER TO",8D
|
|
_PRNT "SIGNIFY WHETHER IT IS SIGNED (S).",8D8D
|
|
_PRNT "REM16 #5000;#333;U RETURNS:",8D8D
|
|
REM16 #5000;#333;U
|
|
_DUMP RETURN;RETLEN
|
|
_PRNT " ",8D8D
|
|
_WAIT
|
|
*
|
|
_PRNT "CMP16 COMPARES TWO 16-BIT VALUES",8D
|
|
_PRNT "SETTING FLAGS AS WOULD THE CMP ",8D
|
|
_PRNT "COMMAND IN 6502 ASSEMBLY. WE WON'T",8D
|
|
_PRNT "BE ILLUSTRATING THIS FOR NOW ",8D
|
|
_PRNT "BECAUSE I HATE YOU.",8D8D
|
|
_WAIT
|
|
*
|
|
_PRNT " ",8D8D
|
|
_PRNT "AND FINALLY, THE RND16 MACRO",8D
|
|
_PRNT "RETURNS A RANDOM 16-BIT VALUE, FROM",8D
|
|
_PRNT "0 TO 65455.",8D8D
|
|
LUP 5
|
|
_PRNT "RND16 RETURNS:",8D8D
|
|
RND16
|
|
_DUMP RETURN;RETLEN
|
|
_PRNT " ",8D8D
|
|
_WAIT
|
|
--^
|
|
*
|
|
********************************
|
|
*
|
|
* THE FOLLOWING IS CURRENTLY UNDER
|
|
* CONSTRUCTION, AND DOES NOT YET
|
|
* WORK AS PLANNED. FLOATING POINT
|
|
* ROUTINES WILL BE ADDED IN THE NEXT
|
|
* MAJOR VERSION RELEASE.
|
|
*
|
|
********************************
|
|
*
|
|
_PRNT " ",8D8D8D8D8D8D8D8D
|
|
_PRNT "FLOATING-POINT CALCULATION",8D
|
|
_PRNT "--------------------------",8D8D
|
|
_PRNT "THIS LIBRARY USES THE APPLESOFT",8D
|
|
_PRNT "ROUTINES FOR FLOATING-POINT",8D
|
|
_PRNT "ARITHMETIC, WRITTEN ORIGINALLY",8D
|
|
_PRNT "BY STEVE WOZNIAK. THESE ARE",8D
|
|
_PRNT "PRESENT IN EVERY APPLE II MODEL",8D
|
|
_PRNT "FROM THE APPLE ][+ AND FORWARD.",8D
|
|
_PRNT " ",8D8D
|
|
_WAIT
|
|
_PRNT "FLOATING-POINT VALUES ARE STORED",8D
|
|
_PRNT "USING SCIENTIFIC NOTATION, WHERE",8D
|
|
_PRNT "THE FIRST BYTE IS THE EXPONENT,",8D
|
|
_PRNT "THE SECOND THROUGH FIFTH BYTES",8D
|
|
_PRNT "ARE THE MANTISSA, AND THE SIXTH",8D
|
|
_PRNT "BYTE THE SIGN.",8D8D
|
|
_WAIT
|
|
_PRNT "EXP MANTISSA SIGN",8D
|
|
_PRNT "00 01 02 03 04 05",8D8D8D
|
|
LDA #$84 ; = $80 + EXPONENT; -1 = $79
|
|
STA $300
|
|
LDA #A0 ; MANTISSA
|
|
STA $301 ; STORED MOST SIGNIFICANT
|
|
LDA #00
|
|
STA $302
|
|
STA $303 ; LEFT TO RIGHT.
|
|
STA $304
|
|
LDA #$FF
|
|
STA $305 ; FF= NEGATIVE, 0 = POSITIVE
|
|
_DUMP $300;#6
|
|
*
|
|
** 25E10^-1 = 2.5
|
|
*
|
|
_WAIT
|
|
_PRNT "SO, LET'S PUT 2.5 IN $300 AND",8D
|
|
_PRNT "10 IN $310, THEN ADD THEM.",8D8D
|
|
_PRNT "2.5 = 25E-1 SCIENTIFIC NOTATION",8D8D
|
|
_PRNT " = 01 37 00 00 00 FF",8D8D
|
|
_PRNT "10 = 1E+1",8D
|
|
_PRNT " = 01 01 00 00 00 00",8D8D
|
|
_PRNT " ",8D8D8D
|
|
LDA #$84
|
|
LDA #$A0
|
|
STA $310
|
|
STA $311
|
|
LDA #0
|
|
STA $312
|
|
STA $313
|
|
STA $314
|
|
STA $315
|
|
_WAIT
|
|
_PRNT " ",8D8D
|
|
_PRNT "NOW LET'S ADD THEM WITH THE",8D
|
|
_PRNT "FPADD MACRO TO SEE THE RESULT.",8D8D
|
|
_PRNT "FPADD $300;$310 RETURNS:",8D8D
|
|
FPADD $300;$310
|
|
_DUMP RETURN;RETLEN
|
|
*
|
|
********************************
|
|
*
|
|
* END OF CONSTRUCTION
|
|
*
|
|
********************************
|
|
*
|
|
JMP REENTRY
|
|
*
|
|
*``````````````````````````````*
|
|
* BOTTOM INCLUDES *
|
|
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
|
*
|
|
** BOTTOM INCLUDES
|
|
*
|
|
PUT MATH8.LIB
|
|
PUT MATH16.LIB
|
|
PUT REQUIRED.LIB
|
|
*
|