.TT219 LDA #2 ; Clear the top part of the screen, draw a border box, JSR TRADEMODE ; and set up a printable trading screen with a view type ; in QQ11 of 2 (Buy Cargo screen) JSR TT163 ; Print the column headers for the prices table LDA #%10000000 ; Set bit 7 of QQ17 to switch to Sentence Case, with the STA QQ17 ; next letter in capitals LDA #0 ; We're going to loop through all the available market STA QQ29 ; items, so we set up a counter in QQ29 to denote the ; current item and start it at 0 .TT220 JSR TT151 ; Call TT151 to print the item name, market price and ; availability of the current item, and set QQ24 to the ; item's price / 4, QQ25 to the quantity available and ; QQ19+1 to byte #1 from the market prices table for ; this item LDA QQ25 ; If there are some of the current item available, jump BNE TT224 ; to TT224 below to see if we want to buy any JMP TT222 ; Otherwise there are none available, so jump down to ; TT222 to skip this item .TQ4 LDY #176 ; Set Y to the recursive token 16 ("QUANTITY") .Tc JSR TT162 ; Print a space TYA ; Print the recursive token in Y followed by a question JSR prq ; mark .TTX224 JSR dn2 ; Call dn2 to make a short, high beep and delay for 1 ; second .TT224 JSR CLYNS ; Clear the bottom three text rows of the upper screen, ; and move the text cursor to the first cleared row LDA #204 ; Print recursive token 44 ("QUANTITY OF ") JSR TT27 LDA QQ29 ; Print recursive token 48 + QQ29, which will be in the CLC ; range 48 ("FOOD") to 64 ("ALIEN ITEMS"), so this ADC #208 ; prints the current item's name JSR TT27 LDA #'/' ; Print "/" JSR TT27 JSR TT152 ; Print the unit ("t", "kg" or "g") for the current item ; (as the call to TT151 above set QQ19+1 with the ; appropriate value) LDA #'?' ; Print "?" JSR TT27 JSR TT67 ; Print a newline LDX #0 ; These instructions have no effect, as they are STX R ; repeated at the start of gnum, which we call next. LDX #12 ; Perhaps they were left behind when code was moved from STX T1 ; here into gnum, and weren't deleted? { .TT223 ; This label is a duplicate of a label in gnum (which is ; why we need to surround it with braces, as BeebAsm ; doesn't allow us to redefine labels, unlike BBC ; BASIC). This could be a remnant if the code in gnum ; was originally here, but got moved into the gnum ; subroutine without removing the original } JSR gnum ; Call gnum to get a number from the keyboard, which ; will be the quantity of this item we want to purchase, ; returning the number entered in A and R BCS TQ4 ; If gnum set the C flag, the number entered is greater ; than the quantity available, so jump up to TQ4 to ; display a "Quantity?" error, beep, clear the number ; and try again STA P ; Otherwise we have a valid purchase quantity entered, ; so store the amount we want to purchase in P JSR tnpr ; Call tnpr to work out whether there is room in the ; cargo hold for this item LDY #206 ; Set Y to recursive token 46 (" CARGO{sentence case}") ; to pass to the Tc routine if we call it LDA R ; If R = 0, then we didn't enter a number above, so skip BEQ P%+4 ; the following instruction BCS Tc ; If the C flag is set, then there is no room in the ; cargo hold, jump up to Tc to print a "Cargo?" error, ; beep, clear the number and try again LDA QQ24 ; There is room in the cargo hold, so now to check STA Q ; whether we have enough cash, so fetch the item's ; price / 4, which was returned in QQ24 by the call ; to TT151 above and store it in Q JSR GCASH ; Call GCASH to calculate: ; ; (Y X) = P * Q * 4 ; ; which will be the total price of this transaction ; (as P contains the purchase quantity and Q contains ; the item's price / 4) JSR LCASH ; Subtract (Y X) cash from the cash pot in CASH LDY #197 ; If the C flag is clear, we didn't have enough cash, BCC Tc ; so set Y to the recursive token 37 ("CASH") and jump ; up to Tc to print a "Cash?" error, beep, clear the ; number and try again LDY QQ29 ; Fetch the current market item number from QQ29 into Y LDA R ; Set A to the number of items we just purchased (this ; was set by gnum above) PHA ; Store the quantity just purchased on the stack CLC ; Add the number purchased to the Y-th byte of QQ20, ADC QQ20,Y ; which contains the number of items of this type in STA QQ20,Y ; our hold (so this transfers the bought items into our ; cargo hold) LDA AVL,Y ; Subtract the number of items from the Y-th byte of SEC ; AVL, which contains the number of items of this type SBC R ; that are available on the market STA AVL,Y PLA ; Restore the quantity just purchased BEQ TT222 ; If we didn't buy anything, jump to TT222 to skip the ; following instruction JSR dn ; Call dn to print the amount of cash left in the cash ; pot, then make a short, high beep to confirm the ; purchase, and delay for 1 second .TT222 LDA QQ29 ; Move the text cursor to row QQ29 + 5 (where QQ29 is CLC ; the item number, starting from 0) ADC #5 JSR DOYC LDA #0 ; Move the text cursor to column 0 JSR DOXC INC QQ29 ; Increment QQ29 to point to the next item LDA QQ29 ; If QQ29 >= 17 then jump to BAY2 as we have done the CMP #17 ; last item BCS BAY2 JMP TT220 ; Otherwise loop back to TT220 to print the next market ; item .BAY2 LDA #$10 ; Switch the text colour to white STA COL2 LDA #f9 ; Jump into the main loop at FRCE, setting the key JMP FRCE ; "pressed" to "9" (so we show the Inventory screen)Name: TT219 [Show more] Type: Subroutine Category: Market Summary: Show the Buy Cargo screenContext: See this subroutine in context in the source code References: This subroutine is called as follows: * TT102 calls TT219 * gnum calls via BAY2 * TT210 calls via BAY2
Other entry points: BAY2 Jump into the main loop at FRCE, setting the key "pressed" to the Inventory key
[X]
Subroutine CLYNS (category: Drawing the screen)
Clear the bottom three text rows of the space view
[X]
Subroutine DOXC (category: Text)
Move the text cursor to a specific column
[X]
Subroutine DOYC (category: Text)
Move the text cursor to a specific row
[X]
Entry point FRCE in subroutine Main game loop (Part 6 of 6) (category: Main loop)
The entry point for the main game loop if we want to jump straight to a specific screen, by pretending to "press" a key, in which case A contains the internal key number of the key we want to "press"
[X]
Subroutine GCASH (category: Maths (Arithmetic))
Calculate (Y X) = P * Q * 4
[X]
Subroutine LCASH (category: Maths (Arithmetic))
Subtract an amount of cash from the cash pot
[X]
Label TQ4 is local to this routine
[X]
Subroutine TRADEMODE (category: Drawing the screen)
Clear the screen and set up a trading screen
[X]
Subroutine TT151 (category: Market)
Print the name, price and availability of a market item
[X]
Subroutine TT152 (category: Market)
Print the unit ("t", "kg" or "g") for a market item
[X]
Subroutine TT162 (category: Text)
Print a space
[X]
Subroutine TT163 (category: Market)
Print the headers for the table of market prices
[X]
Label TT220 is local to this routine
[X]
Label TT222 is local to this routine
[X]
Label TT224 is local to this routine
[X]
Subroutine TT27 (category: Text)
Print a text token
[X]
Subroutine TT67 (category: Text)
Print a newline
[X]
Label Tc is local to this routine
[X]
Subroutine dn (category: Market)
Print the amount of money we have left in the cash pot, then make a short, high beep and delay for 1 second
[X]
Subroutine dn2 (category: Text)
Make a short, high beep and delay for 1 second
[X]
Configuration variable f9 = $20
Internal key number for key "9" (Inventory)
[X]
Subroutine gnum (category: Market)
Get a number from the keyboard
[X]
Subroutine prq (category: Text)
Print a text token followed by a question mark
[X]
Subroutine tnpr (category: Market)
Work out if we have space for a specific amount of cargo