Grevle Posted October 27, 2023 Share Posted October 27, 2023 (edited) i know how to add the score and put on screen in assembler using the example below but im trying to substract from score and put on screen in assembler. i tried change "ADC" in the code to "SBC" but it doesn't work properly. Can this code be modified to substract in BCD maths , Or do i need a different code alltogether ? "Window" is the screen adress. "its a 4 digit score, max score is 9999" ; EXAMPLE CODE TO ADD AMOUNT OF SCORE CLC LDA #$25 ; AMOUNT OF SCORE TO ADD IN DECIMAL MODE STA POINTS JSR SCOREK ;main code would be here just a example ; ========================================================== ; ADD SCORE AND PRINT ON SCREEN ROUTINE SCOREK SED LDA SCORE+1;LOAD TWO LOW DIGITS ADC POINTS ;ADD POINT VALUE OF BRICK STA SCORE+1 LDA #$00 ;WILL ALSO ADD CARRY BIT IF NECESSARY ADC SCORE STA SCORE CLD ; NOW PRINT NEW SCORE ON SCREEN PRINTSCORE LDX #0 LDY #35 ONE LDA SCORE,X LSR ;EACH BYTE HOLDS 2 NUMBERS LSR ;SHIFT UPPER NIBBLE OVER LSR ;AND DO IT LSR ;FIRST. ORA #16 ; TRANSLATE NUMBER INTO INTERNAL CHARACTER STA WINDOW-3,Y ;STORE HIGHER DIGIT OF PAIR IN TEXT AREA INY ; NEXT LDA SCORE ,X AND #$0F ; NOW DO LOWER NIBBLE ORA #16 ; MAKE A CHR STA WINDOW-3,Y ;STORE LOWER DIGIT OF PAIR IN TEXT AREA INY INX CPX #2 ; DONE BOTH BYTES? (ALL 4 SCORE DIGITS) BNE ONE RTS Edited October 27, 2023 by Grevle Quote Link to comment Share on other sites More sharing options...
Rybags Posted October 28, 2023 Share Posted October 28, 2023 As with normal SBC you have to use SEC before the operation. If you were just doing 1 or 2 digits then adding 99 would be equivalent to subtracting 1, but the carry would be invalid. So, you will need an extra code section to do subtracts. Quote Link to comment Share on other sites More sharing options...
TGB1718 Posted October 28, 2023 Share Posted October 28, 2023 You need to do something like this:- ; EXAMPLE CODE TO SUBTRACT AMOUNT OF SCORE LDA #$25 ; AMOUNT OF SCORE TO ADD IN DECIMAL MODE STA POINTS JSR SUBTRACT . . . SUBTRACT SED SEC ; MUST SET CARRY FLAG BEFORE A SUBTRACT LDA SCORE+1;LOAD TWO LOW DIGITS SBC POINTS ;SUBTRACT POINT VALUE OF BRICK STA SCORE+1 LDA SCORE SBC #$00 ;WILL ALSO SUBTRACT CARRY BIT IF NECESSARY STA SCORE CLD RTS 3 Quote Link to comment Share on other sites More sharing options...
Grevle Posted October 28, 2023 Author Share Posted October 28, 2023 (edited) 3 hours ago, TGB1718 said: You need to do something like this: Yes That was it !. Works flawless now. 😄. Thanks a lot 👍 3 hours ago, TGB1718 said: ; EXAMPLE CODE TO SUBTRACT AMOUNT OF SCORE LDA #$25 ; AMOUNT OF SCORE TO ADD IN DECIMAL MODE STA POINTS JSR SUBTRACT . . . SUBTRACT SED SEC ; MUST SET CARRY FLAG BEFORE A SUBTRACT LDA SCORE+1;LOAD TWO LOW DIGITS SBC POINTS ;SUBTRACT POINT VALUE OF BRICK STA SCORE+1 LDA SCORE SBC #$00 ;WILL ALSO SUBTRACT CARRY BIT IF NECESSARY STA SCORE CLD RTS Edited October 28, 2023 by Grevle Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.